自行打印后,对象属性看起来有所不同

时间:2018-09-13 09:16:57

标签: javascript date time luxon

我正在尝试使用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 :(得分:1)

第一个1536830052009,这是您的时间(以毫秒为单位),

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

您可能希望使用getTimezoneOffset()

检查您的时区
  

以分钟为单位返回UTC时间与本地时间之间的时差

许多人使用moment.js来玩Date,我知道这不是您的问题,但是也许您可以找到一些有用的东西

答案 1 :(得分:0)

ts不是公共财产,您不应使用它。卢森堡(Luxon)会采取各种技巧来使数学正确无误。如果需要时间戳,请使用date.toMillis()。如果您想要一个JS日期,请使用date.toJSDate()

另外两个重要的知识:

  1. 这并不是忽略您的区域。区域不会更改时间。它更像是有关时间的元数据,该时间会影响我们的显示方式。 Luxon文档cover this有点。您不应该期望通过摆弄区域来提取不同的时间戳。现在永远都是现在。
  2. 请记住,本机Date对象不支持本地时区。因此,每当您从Luxon对象转换为本地Date时,该信息都会丢失。时间本身将是相同的(意思是,它将表示相同的毫秒),但是它将以当地时间表示。