Свойство объекта после печати выглядит иначе - PullRequest
0 голосов
/ 13 сентября 2018

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

0 голосов
/ 20 октября 2018

ts не является публичной собственностью, и вы не должны его использовать. Luxon делает всевозможные трюки под одеялом, чтобы понять математику правильно. Если вам нужна временная метка, просто используйте date.toMillis(). Если вы хотите JS Date, используйте date.toJSDate().

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

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

Первый 1536830052009, это ваше время в миллисекундах,

new Date(1536830052009)
// output Thu Sep 13 2018 11:14:12 GMT+0200 (CEST)

Вы можете проверить часовой пояс с помощью getTimezoneOffset()

Возвращает разницу во времени между временем UTC и местным временем, в минутах

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

...