2017-11-04 121 views
0

有没有一种方法可以将UTC或Moment JS对象或Date()对象的类型/格式或包含datetime的纯字符串的传入变量检测/转换为Moment JS对象的常见格式?要将任何类型的javascript datetime变量转换为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); 

我能够把所有其他格式瞬间JS转换没有在数据中的任何“偏差”,但如果变量已经是Date()对象。

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

注:由于Date()对象只能在浏览器中生成的,所以没有必要添加偏移时间转换为本地时区。

是否有更好的(故障安全)方法来解决此问题?

+0

看一看['moment.utc()'](http://momentjs.com/docs/#/parsing/utc/):_By默认情况下,时刻解析并在本地时间显示。如果你想解析或显示UTC的时刻,你可以使用'moment.utc()'而不是'moment()'_ – VincenzoC

+0

@VincenzoC req。是在本地时间显示所有输入的'datetime',不管它们在什么时间格式。这就是添加偏移量的原因。 – Mikki

+0

我不完全得到你正在尝试做的,你可以提供一个片断或小提琴和您预期的结果的例子吗?无论如何看看['local()'](http://momentjs.com/docs/#/manipulating/local/)函数将矩对象转换为本地模式(默认)。请参阅[本地vs UTC与偏移量](http://momentjs.com/guides/#/parsing/local-utc-zone/)指南。 – VincenzoC

回答

1

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

然后,你会怎么做:

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

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

相关问题