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

将任何类型的javascript datetime变量转换为矩JS对象,javascript,angularjs,datetime,momentjs,angular-moment,Javascript,Angularjs,Datetime,Momentjs,Angular Moment,是否有一种方法可以检测/转换UTC或矩JS对象或日期对象类型/格式或包含日期时间的普通字符串的传入变量,将其转换为矩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:

是否有一种方法可以检测/转换UTC或矩JS对象或日期对象类型/格式或包含日期时间的普通字符串的传入变量,将其转换为矩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"
我的黑客:

我能够将所有其他格式转换为矩JS,数据中没有任何偏差,除非变量已经是日期对象

注意:由于日期对象只能在浏览器中生成,因此无需添加偏移量即可将时间转换为本地时区


这个解决方案有更好的故障保护方法吗?

javascript日期Z的最后一个字符显示对象的时区设置为UTC Z时间,即祖鲁时间。你的时区是正确的。如果要将时区转换为本地时区,应使用with moment.js

然后你会做:

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

将所有时刻对象转换/设置为用户的时区。

查看:默认情况下,时刻解析并以本地时间显示。如果要以UTC格式解析或显示某个时刻,可以使用矩.UTC而不是moment@VincenzoC请求。是以本地时间显示所有输入的datetime,无论它们采用什么时间格式。这就是添加偏移量的原因。我不完全明白您想做什么,您能提供一个片段或小提琴和一个预期结果的示例吗?无论如何,请查看将力矩对象转换为本地模式默认值的函数。参见指南。
var offset = moment().utcOffset();
momentObj = (variable instanceof Date) ? moment(variable) : moment(variable).utcOffset(offset);
momentObj = moment(variable).tz(moment.tz.guess());