mktime 기능이 잘못된 시간을 반환합니까?
문제
MKTime 기능에 약간의 문제가 있습니다. 내 제작 서버에서 다음을 실행하면 다음을 수행합니다.
echo '<p>' . mktime(24, 0,0, 8,29,2009) . ' - 12pm</p>';
echo '<p>' . mktime(23, 0,0, 8,29,2009) . ' - 11pm</p>';
echo '<p>' . mktime(22, 0,0, 8,29,2009) . ' - 10pm</p>';
그런 다음 해당 타임 스탬프를 다시 읽을 수있는 형식으로 변환합니다 (사용 www.unixtimestamp.com 빠른 변환을 위해), 시간은 모두 1 시간 씩 떨어져 있습니다. 나는 원래 이것이 2400 대 0000의 문제라고 생각했지만 다른 날짜가 꺼진 것을 설명하지는 않을 것입니다.
어떤 아이디어?
해결책
서버마다 기대하는 것과는 시간대가 다릅니다. UNIX 타임 스탬프는 1.1.1970 00:00:00 이후 몇 초 안에 측정됩니다 GMT, 따라서 코드에 숨겨진 시간대 변환이 있습니다. 당신도 할 수 있습니다
- 사용
gmmktime()
GMT 날짜에 대한 타임 스탬프를 만들려면 - 내장을 사용하십시오 DateTime 클래스,
- 수정하십시오 php.ini의 시간대 설정, 또는
- 기능과 함께 사용할 시간대를 설정하십시오
date_default_timezone_set()
.
다른 팁
방금 명령 줄에서 다음을 실행했고 다음 (예상) 출력을 얻었습니다. 당신이 그들을 실행하면 어떻게됩니까?
$ php -r "echo date('H:i:s Y-m-d', mktime(24, 0, 0, 8, 29, 2009));"
00:00:00 2009-08-30
$ php -r "echo date('H:i:s Y-m-d', mktime(23, 0, 0, 8, 29, 2009));"
23:00:00 2009-08-29
$ php -r "echo date('H:i:s Y-m-d', mktime(22, 0, 0, 8, 29, 2009));"
22:00:00 2009-08-29
내 문제는 mktime
나는 요일과 월을 입력합니다 주요 0. 함수가 나에게 잘못된 결과를 반환 한 것보다. 한 가지 옵션은 다음과 같은 기능으로 선행 0을 제거하는 것입니다.
$str = ltrim($str, '0');
또는
$var = (int)$var;
나는 Soulmerge의 한 가지 가능성을 사용했습니다.
$date = new DateTime($year . '-' . $month . '-' . $day . ' ' . $hour . ':' . $minute . ':' . $seconds);
$match_time = $date->getTimestamp();
그러나 시간대는 항상 설정되어야합니다 ( date_default_timezone_set()
또는 직접 DateTime
.
제휴하지 않습니다 StackOverflow