В базе данных у меня есть строка с датой и временем, скажем, 2014-04-16 00:00:00
после чего я конвертирую это время datetime в timestamp unix, используя
strtotime('2014-04-16 00:00:00') * 1000; // result 1397577600000
В javascript я пытаюсь получить час, используя следующий код
var d = new Date(1397577600000); // 1397577600000 from php unix timestamp in previous code
d.getHours(); // return 23
d.getMinutes(); // return 0
почему getHours()
возвращает 23 вместо 0? есть ли разница между меткой времени js и меткой времени php?
Объекты Date
в javascript всегда будут возвращать значения на основе текущего часового пояса браузера. Поэтому, если d.getHours()
возвращает 23 для вас, это может указывать на часовой пояс вашего локального браузера на час раньше, чем UTC (-01: 00).
Вам нужны часы для объекта Date
основанного на часовом поясе UTC, вы можете использовать:
d.getUTCHours()
Чтобы выпустить бесплатные советы, вы можете использовать следующий код, чтобы иметь дело с вашими значениями даты из одного контекста в другой:
PHP:// Fetched from the db somehow
$datetime_db = '2014-04-16 00:00:00';
// Convert to PHP DateTime object:
$datetime_obj = new DateTime($datetime_db, new DateTimeZone('UTC'));
// Format DateTime object to javascript-friendly ISO-8601 format:
$datetime_iso = $datetime_obj->format(DateTime::W3C);
Javascript: var d = new Date('2014-04-16T00:00:00+00:00'); // 2014-04-16T00:00:00+00:00 from PHP in previous code
d.getUTCHours(); // returns 0
Это позволяет переносить переменные datetime в формате объекта, специфичного для языка, при обработке на этом языке, и сериализует значение в строковый формат, который принимает все текущие браузеры/языки (международный стандарт ISO-8601).
Хорошо, основываясь на том, что сказал Арун П Джонни.
Я strtotime
параметр strtotime
в соответствии с моим strtotime
, в этом случае я изменил его на
strtotime('2014-04-16 00:00:00 GMT+7') * 1000;
надеюсь, что эта помощь поможет всем, у кого есть такая же проблема, как у меня.
Я получаю 21
здесь, потому что в Javascript локальный часовой пояс пользователя будет считаться для получения времени и даты.