Я пытаюсь получить даты из PHP (я получаю их из базы данных в формате 2014-09-16 22:00:00).
Затем я создаю объект в PHP, потому что в некоторых случаях мне приходится работать с этой датой, и я использую:
$output[$i]['when'] = new DateTime($output[$i]['when'], new DateTimeZone('Europe/Brussels'));
Затем я отправляю это обратно в код JavaScript с помощью следующей команды PHP:
$line['when']->format('U')*1000
Фактически, эта строка имеет значение foreach, поэтому вы не видите [$ i].
Моя проблема заключается в том, что при входе в JavaScript, он показывает, как 2 часа назад. Я нахожусь в CET и, как я понимаю, формат («U») означает UTC. Но я подумал с указанием даты и времени, это будет работать. Как я могу решить это? Я знаю, что между CET и UTC разница в 2 часа, поэтому нужно ли это в миллисекундах, тогда * 1000, чтобы иметь микросекунды?
РЕДАКТИРОВАТЬ: разница в 2 часа только на несколько месяцев, а затем становится разница в 1 час. Тогда я понятия не имею, как это решить.
Спасибо, если вы можете помочь.
Используйте стандартный формат, который включает часовой пояс. Первичные два, которые вы должны использовать для наиболее простой совместимости с JavaScript, это RFC 2822 или же ISO 8601. Для этого воспользуемся RFC 2822.
То, что вы передаете в свой javascript, должно быть строкой, возвращаемой из:
$line['when']->format(\DateTime::RFC2822);
Есть константы на Класс DateTime для различных стандартных форматов.
Затем в вашем javascript вы можете сделать следующее:
var myDate = new Date('Tue, 16 Sep 2014 20:39:32 +0100');
Который использует стандарт RFC 2822 для разобрать строку в новый объект Date, который затем можно использовать, как и любой другой объект Date, который должен находиться в правильном часовом поясе.
Других решений пока нет …