дата JavaScript из метки времени php unix

0

В базе данных у меня есть строка с датой и временем, скажем, 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?

  • 2
    потому что на стороне клиента используется местный часовой пояс
  • 0
    хорошо, как это побороть?
Показать ещё 4 комментария
Теги:
datetime

3 ответа

2

Объекты 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).

0

Хорошо, основываясь на том, что сказал Арун П Джонни.

Я strtotime параметр strtotime в соответствии с моим strtotime, в этом случае я изменил его на

strtotime('2014-04-16 00:00:00 GMT+7') * 1000;

надеюсь, что эта помощь поможет всем, у кого есть такая же проблема, как у меня.

  • 0
    это снова не удастся, если у пользователя в системе установлена другая зона тимзона ... попробуйте изменить часовой пояс вашей системы и попробуйте
  • 0
    спасибо, я вижу. но не беспокойтесь .. это для внутреннего использования
0

Я получаю 21 здесь, потому что в Javascript локальный часовой пояс пользователя будет считаться для получения времени и даты.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню