2009-12-10 5 views
0

strtotime ('03 January, 2010')은 GMT + 5 : 30에서 1230993600을 반환합니다.잘못된 결과를 반환하는 PHP strtotime

this에 따르면 유닉스 타임 스탬프 1230993600은 입니다. 그래서 1 년 후입니다.

PHP 5.2.6 및 5.2.11에서 발생합니다.

+0

WFM : '에코 한 strtotime ('2010년 1월 3일');'반환'1231009800' –

+0

사실,이 사이트에 따르면, 유닉스 타임 스탬프 1230993600가 01/3월 9일 @ 8:40:00. –

답변

2

문제는 날짜 문자열에 ,입니다.

2010-01-03 00:00:00 
:

로, 당신의 문자열에 시간 요소에서 날짜를 분리

echo date('Y-m-d H:i:s', strtotime('3rd January 2010')); 

이 (, 제거) 정확한 날짜를 반환

2009-01-03 20:10:00 

반면

echo date('Y-m-d H:i:s', strtotime('3rd January, 2010')); 

반환 보인다

3

W 2010 년은 군대 시간이 아니라 1 년 후임을 가정합니다. 2010 년을 연도로 해석하려면 쉼표를 생략하십시오.

1

strtotime()은 오류가 없습니다. 이 문맥 파서는 날짜에 대한 영어 설명을 타임 스탬프로 변환하려고 시도합니다. 사용중인 형식이 적절한 구문 분석에 적합하지 않은 것으로 보입니다.

다음 예제에서 차이를 볼 수 있습니다

echo strtotime('3rd January,2010')."<BR>"; 
echo strtotime('3 January, 2010')."<BR>"; 
echo strtotime('January 3rd, 2010')."<BR>"; 
echo strtotime('January 3, 2010')."<BR>"; 

결과 :

1231042200 
1231042200 
1262505600 
1262505600 

처음 두 반환 마지막이 아닌 다른 타임 스탬프. 형식 중 마지막 두 단어는 의미 론적으로 (영어로) 정확합니다. 대신이 단어를 사용하려고합니다.

EDIT 다른 포스터가 언급 한 것처럼

, 쉼표 인해 날짜 토큰의 순서로 날짜 부분에 대한 파서 혼란.

echo strtotime('3rd January 2010')."<BR>"; 

은 올바른 형식의 타임 스탬프를 반환합니다. PHP 5.2.10-2ubuntu6.3에

+0

아주 좋은 답변입니다. 약간의 정보를 추가하기 만하면 : strtotime()이 해를 파싱하지 못하면 지정되지 않은 것처럼 현재 연도 (2009 년)를 사용합니다. – Savageman

+0

하지만 2009와 함께 작동하는 이유는 무엇입니까? 게다가, 첫 번째 형식은 완벽하게 유효한 형식입니다. – understack

+0

오케이, Savageman이 대답했습니다. – understack