Функция php strtotime () возвращает пустое значение / 0 - PullRequest
0 голосов
/ 13 февраля 2011

У меня есть данные даты и времени в строковом формате, например:

Sat Mar 24 23:59:59 GMT 2012

Я хочу преобразовать это в метку времени UTC, но когда я пытаюсь это сделать следующим образом:

function texttotime($texttime)
{
    if(!$texttime || $texttime=="")
        return NULL;

    // Sat Mar 24 23:59:59 GMT 2012
    $bits = preg_split('/\s/', $texttime);

    //                  Mar     24      2012    23:59:59    GMT
    return strtotime("$bits[1] $bits[2] $bits[5] $bits[3] bits[4]");
}

Этовыводит 0 (не NULL).

Если я изменю последнюю строку на:

    //                  Mar     24      2012    23:59:59
    return strtotime("$bits[1] $bits[2] $bits[5] $bits[3]");

Она выводит что-то (но неверная временная метка, отключена на -4 часа или около того).

Ответы [ 2 ]

1 голос
/ 13 февраля 2011

Причиной разницы в 4 часа является часовой пояс сервера, который составляет -4 часа от GMT.попытайтесь определить свой текущий часовой пояс следующим образом:

date_default_timezone_set('Europe/London');

$result = strtotime('Sat Mar 24 23:59:59 GMT 2012');

echo date('r', $result);//Sat, 24 Mar 2012 23:59:59 +0000
1 голос
/ 13 февраля 2011

Не совсем уверен, почему вы реорганизуете существующую строку, как ...

echo $timestamp = strtotime('Sat Mar 24 23:59:59 GMT 2012'); 

... работает правильно. (Возвращает 1332633599, который вы можете проверить с помощью date('r', 1332633599); (Это приведет к «Сб, 24 марта 2012 23:59:59 +0000», так что все хорошо.)

Тем не менее, если вы собираетесь извлечь все компоненты строки, вы также можете использовать mktime . Например:

function texttotime($texttime) {
    if(!$texttime || $texttime=="") return NULL;

    list($junk, $month, $day, $time, $timezone, $year) = explode(' ', $texttime);
    list($hour, $minute, $second) = explode(':', $time);

    return mktime($hour, $minute, $second, $month, $day, $year);
}
...