Свойство объекта после печати выглядит иначе
Я пытаюсь использовать Luxon для создания новой даты, используя часовой пояс. Это мой код:
var luxon = require('luxon');
luxon.Settings.defaultZoneName = 'UTC+4';
var date = luxon.DateTime.local();
console.log(date);
var now = new Date(date.ts);
console.log(now.toString());
И это консоль:
DateTime {
ts: 2018-09-13T13:09:45.333+04:00,
zone: UTC+4,
locale: en-US }
Thu Sep 13 2018 11:09:45 GMT+0200 (CEST)
Но если я попытаюсь получить доступ к ts
собственность как так
var date = luxon.DateTime.local();
console.log(date.ts); // here
var now = new Date(date.ts);
console.log(now.toString());
Я получаю это в консоли:
1536830052009
Thu Sep 13 2018 11:14:12 GMT+0200 (CEST)
Это почему? Это делает какую-то математику на заднем плане? И получается это date.ts
просто игнорирует мой часовой пояс. Как я могу это исправить?
2 ответа
Первый 1536830052009
Это ваше время в миллисекундах,
new Date(1536830052009)
// output Thu Sep 13 2018 11:14:12 GMT+0200 (CEST)
Вы можете проверить свой часовой пояс с getTimezoneOffset()
Возвращает разницу во времени между временем UTC и местным временем, в минутах
Многие люди используют moment.js, чтобы поиграть с Date, я знаю, что это не в вашем вопросе, но, возможно, вы могли бы найти некоторые полезные вещи
ts
не является публичной собственностью, и вы не должны ее использовать. Luxon делает всевозможные трюки под одеялом, чтобы понять математику правильно. Если вам нужна временная метка, просто используйте date.toMillis()
, Если вы хотите JS Date, используйте date.toJSDate()
,
Еще две важные вещи, которые нужно знать:
- Это не игнорирование вашей зоны. Зона не меняет время. Это больше похоже на метаданные о времени, которые влияют на то, как мы их отображаем. Документы Luxon охватывают это немного. Вы не должны ожидать извлечения другой метки времени, играя с зоной. Сейчас всегда сейчас.
- Помните, что собственный объект Date не поддерживает часовые пояса, кроме вашего локального. Таким образом, каждый раз, когда вы конвертируете объект Luxon в собственную дату, эта информация теряется. Время само по себе будет одинаковым (то есть оно будет представлять одну и ту же миллисекунду), но оно будет выражаться в местном времени.