2011-04-11 1 views
3

내 개발 컴퓨터에서 strtotime()을 사용하여 행복하게 사용하여 일부는 1800 년대에있는 일부 날짜와 1500 년대의 극단적 인 예를 파싱했습니다.PHP 32 비트 날짜 분석 13Dec 이전 1901

그러나 내 개발 컴퓨터는 64 비트이고 서버는 32 비트입니다. 32 비트 시스템에서 Fri, 1901 년 12 월 13 일 20:45:54 UTC가 범위를 벗어난 날짜 이전입니다 (strtotime에 대한 참고 사항 참조).

이 사용자 지정 코드를 작성하게되어 기쁩니다.하지만 PHP inbuilt 함수 중 어떤 것이 이것을 관리하는지 묻는다고 생각했습니다. 날짜는 ISO 8601 형식입니다. 00 : :이 서버가 PHP와에 CentOS 5.4 5.2.10

+1

Aww ... PHP 5.3의 경우 'DateTime :: createFromFormat'을 사용할 수 있습니다. 문제의 최선의 해결책이라고 생각합니다. 날짜는 어떤 형식입니까? 예 : –

+0

1901-12-12T05 : 00 : 00Z. –

+0

@ Pekka .... 동의하면 PHP를 업그레이드 할 수 있습니까? 5.2는 더 이상 지원되지 않으므로 5.3으로 이동해야합니다. – Spudley

답변

3

1901-12-12T05 인 가치가 무엇인지에 대한

00Z 예를 들어이

지금은 그것을 테스트 할 수 없습니다 , DateTime's constructorcreateFromFormat 없이도 형식을 허용 할 수 있습니다. 나는 문서에서 실제로 말할 수 없다.

try { 
    $date = new DateTime('1901-12-12T05:00:00Z'); 
} catch (Exception $e) { 
    echo "Arggh! ".$e->getMessage(); 
    die(); 
} 

echo $date->format('Y-m-d H:i:s'); 

을 시도하고 (즉 그것을 UTC 시간 수)가 제대로 Z을 이해 여부에 특별한주의를 기울이고, 무슨 일이 일어 나는지.

DateTime은 모든 시스템에서 내부적으로 64 비트 숫자를 사용하며 범위 제한이 없습니다.

마찬가지로 5.3.3부터는 date()의 자리 표시 자 중 하나가 나타내는 날짜를 구문 분석 할 수있는 createFromFormat을 사용할 수 있습니다. 추측하는 대신 특정 패턴을 구문 분석하도록 강요하므로 최적의 방법입니다.

+0

감사합니다.이 코드로 로컬로 작업하고 있습니다. 한 번 배치하면 작동합니다 큰 녹색 눈금을 제공합니다. –