Свойство объекта после печати выглядит иначе

Я пытаюсь использовать 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(),

Еще две важные вещи, которые нужно знать:

  1. Это не игнорирование вашей зоны. Зона не меняет время. Это больше похоже на метаданные о времени, которые влияют на то, как мы их отображаем. Документы Luxon охватывают это немного. Вы не должны ожидать извлечения другой метки времени, играя с зоной. Сейчас всегда сейчас.
  2. Помните, что собственный объект Date не поддерживает часовые пояса, кроме вашего локального. Таким образом, каждый раз, когда вы конвертируете объект Luxon в собственную дату, эта информация теряется. Время само по себе будет одинаковым (то есть оно будет представлять одну и ту же миллисекунду), но оно будет выражаться в местном времени.
Другие вопросы по тегам