将任何类型的 javascript datetime 变量转换为 moment JS 对象

To convert any type of javascript datetime variable to moment JS object

有没有办法 detect/convert UTC 或 Moment JS 对象 type/format 的传入变量或 Date() 对象或包含 datetime 的纯字符串,到 Moment JS 对象的通用格式?

示例:

"1509760983",
Date 2017-10-10T02:20:10.570Z,
Object { _isAMomentObject: true, _isUTC: false, _locale: Object, _d: Date 2017-11-04T02:17:33.747Z, _z: null },
"Sat, 04 Nov 2017 02:03:03 GMT",
"2017-11-04T02:20:14.896Z"

我的技巧:

var offset = moment().utcOffset();
momentObj = moment(variable).utcOffset(offset);

我能够在数据中没有任何 "deviation" 的情况下将所有其他格式转换为 Moment JS,除非变量已经是 Date() 对象。

var offset = moment().utcOffset();
momentObj = (variable instanceof Date) ? moment(variable) : moment(variable).utcOffset(offset);

注意:由于Date()对象只能在浏览器中生成,所以不需要添加偏移量将时间转换为本地时区。

这个解决方案有更好的(故障安全)方法吗?

javascript 日期的最后一个字符 "Z" 表明对象的时区设置为 UTC(Z 时间,zulu 时间)。您正在获得正确的时区。如果你想将时区转换为本地时区,你应该使用 moment timezone plugin 和 moment.js。

那么你会做:

momentObj = moment(variable).tz(moment.tz.guess());

到convert/set所有时刻对象到用户的时区。