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
Ответы
Ответ 1
Вам нужно использовать ту же зону времени для разумного сравнения:
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);
Ответ 2
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");
Ответ 3
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