Javascript 矩JS初始化和utc()方法
我想了解矩JS对矩对象的初始化 例如,如果我想为日期和时间创建一个时刻: 2000年4月1日凌晨3:25:00,utc偏移距utc/GMT+8小时 我在javascript对象中表示这一点:Javascript 矩JS初始化和utc()方法,javascript,time,momentjs,utc,Javascript,Time,Momentjs,Utc,我想了解矩JS对矩对象的初始化 例如,如果我想为日期和时间创建一个时刻: 2000年4月1日凌晨3:25:00,utc偏移距utc/GMT+8小时 我在javascript对象中表示这一点: var obj = { year: 2000, month: 4, //APRIL day: 1, hour: 3, minute: 25, second: 0, utcOffset: 8 //8 hours from UTC } 然后,我创建了一个方便的函数,我可以用它
var obj = {
year: 2000,
month: 4, //APRIL
day: 1,
hour: 3,
minute: 25,
second: 0,
utcOffset: 8 //8 hours from UTC
}
然后,我创建了一个方便的函数,我可以用它来创建一个有瞬间js的瞬间:
var makemoment = function(obj){
var m = moment([obj.year, obj.month - 1, obj.day, obj.hour, obj.minute, obj.second, 0]).utcOffset(obj.utcOffset);
return m;
}
当我使用此函数创建时刻。。。
e、 g
如果我检查上面的结果对象,我可以看到它有一个属性\u d
我希望具有如下值:
_d Date {Sat Apr 01 2000 03:25:00 GMT+0800 (HKT)}
但实际值对我来说没有意义,因为我指定时间为3:25:00,并且已经是GMT+0800,所以不需要在时间上再加8小时
_d Date {Sat Apr 01 2000 11:25:00 GMT+0800 (HKT)}
尽管有这个值,但如果Iconsole.log(result)
我得到了正确的预期日期:
2000-04-01T03:25:00+08:00
如果我现在调用utc方法。e、 g.result.utc()
如果我再次检查对象,我可以看到现在\u d
已更改为我最初的预期值:
_d Date {Sat Apr 01 2000 03:25:00 GMT+0800 (HKT)}
但是,现在如果我执行result.format()
我获得了正确的UTC日期和时间:
2000-03-31T19:25:00+00:00
我不明白这里有什么吗????
在矩.js中如何使用_d值???
我是否应该忽略_d值,因为它只是矩.js的内部内容
我已经为创建了JSFIDLE来说明我的观点
有几件事:
- JavaScript中的一个常见约定是,以下划线作为前缀的对象字段将被视为私有/内部字段,而不是直接使用。虽然通过闭包隐藏它们可能更方便用户,但速度也较慢,因此像moment.js这样的库选择将它们公开
- 不要使用
,而是调用公共函数,如\u d
,或文档中显示的任何其他函数.format()
- 如果你真的想了解更多关于
,请查看\u d
对象中显示的时区始终与运行代码的计算机相对。JavaScript的Date
对象不能反映其他时区。当矩使用Date
时,它通常只使用由\u d
给出的瞬时值,该值仅反映UTC。(实际上,我们正在考虑在将来的版本中完全删除\u d.getTime()
。)\u d
- 确实需要调整偏移量,但应该从
开始,而不是从本地时间开始。修正后的功能是:时刻.utc
var makemoment = function(obj){ var m = moment.utc([obj.year, obj.month - 1, obj.day, obj.hour, obj.minute, obj.second, 0]); m.subtract(obj.utcOffset, 'hours'); m.utcOffset(obj.utcOffset); return m; }
- 您编写的函数与下面的函数非常相似。您可以将对象传递给
或时刻
。与您的不同之处在于,moment's使用基于零的月份,并且还不支持传递时刻.utc
字段。您可能只考虑使用它。utcOffset
var makemoment = function(obj){ obj.month--; // switch to zero-based months var m = moment.utc(obj); obj.month++; // put it back m.subtract(obj.utcOffset, 'hours'); m.utcOffset(obj.utcOffset); return m; }
var makemoment = function(obj){
obj.month--; // switch to zero-based months
var m = moment.utc(obj);
obj.month++; // put it back
m.subtract(obj.utcOffset, 'hours');
m.utcOffset(obj.utcOffset);
return m;
}