PHP strtotime и JavaScript Date.parse возвращают разные временные метки

Я получаю то же значение даты и времени в секундах в JavaScript, которое задается strtotime() в PHP. Но мне нужно такое же значение в JavaScript.

Код PHP

echo strtotime("2011-01-26 13:51:50");
// 1296046310

Код JavaScript

var d = Date.parse("2011-01-26 13:51:50");
console.log(d);
// 1296030110000

person Puzzled Boy    schedule 14.02.2013    source источник


Ответы (3)


Вам нужно использовать тот же часовой пояс для разумного сравнения:

echo strtotime("2011-01-26 13:51:50 GMT");
// 1296049910

var d = Date.parse("2011-01-26 13:51:50 GMT") / 1000;
console.log(d);
// 1296049910

Обновить

Согласно стандарту, хорошо поддерживаются только даты в формате RFC 2822:

Date.parse("Wed, 26 Jan 2011 13:51:50 +0000") / 1000

Чтобы сгенерировать такую ​​дату, вы можете использовать gmdate('r') в PHP:

echo gmdate('r', 1296049910);
person Ja͢ck    schedule 14.02.2013
comment
Идет NaN в браузере Mozilla. - person Chinmay235; 03.02.2016

JavaScript использует миллисекунды в качестве метки времени, тогда как PHP использует секунды. В результате вы получаете очень разные даты, поскольку они отличаются в 1000 раз.

образец

echo date('Y-m-d', TIMESTAMP / 1000);

Ответ на комментарий

<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">

    function toTimestamp(year,month,day,hour,minute,second)
    {
        var datum = new Date(Date.UTC(year,month-1,day,hour,minute,second));
        return datum.getTime()/1000;
    }

    $(function()
    {
        console.log(toTimestamp(2011,01,26,13,51,50));

    });

</script>

<?php

echo $the_date = strtotime("2011-01-26 13:51:50");
person Dipesh Parmar    schedule 14.02.2013
comment
Это не единственная разница :) - person Ja͢ck; 14.02.2013
comment
@jack, я знаю, что TIMEZONE тоже имеет значение, но я просто даю второе различие, потому что первое уже было вами указано - person Dipesh Parmar; 14.02.2013

strtotime() и Date.parse() выдают временные метки UNIX с разрешением в секунды и миллисекунды соответственно. Однако, если информация о часовом поясе отсутствует во входной строке, предполагается местное время. Таким образом, входная строка 2011-01-26T13:51:50 может давать разные результаты на разных машинах, даже если PHP (или JavaScript) используется для генерации меток времени на обеих машинах.

Решение состоит в том, чтобы явно указать часовой пояс в строках. Это должно привести к одинаковому результату на любой машине:

Date.parse("Jan 26, 2011 13:51:50 GMT+0500") / 1000; // 1296031910
strtotime("Jan 26, 2011 13:51:50 GMT+0500");         // 1296031910
person Salman A    schedule 14.02.2013