Moment.js转换为date对象
使用Moment.js我无法将正确的时刻对象转换为具有时区的date对象。 我无法得到正确的date。
例:
var oldDate = new Date(), momentObj = moment(oldDate).tz("MST7MDT"), newDate = momentObj.toDate(); console.log("start date " + oldDate) console.log("Format from moment with offset " + momentObj.format()) console.log("Format from moment without offset " + momentObj.utc().format()) console.log("(Date object) Time with offset " + newDate) console.log("(Date object) Time without offset "+ moment.utc(newDate).toDate())
用这个将一个片刻对象转换成一个date对象:
从http://momentjs.com/docs/#/displaying/as-javascript-date/
moment().toDate();
产量:
Tue Nov 04 2014 14:04:01 GMT-0600 (CST)
只要您使用所需区域的数据初始化了时 区 ,您的代码就能按预期工作。
您正在将时刻转换为时区,这反映在momentObj.format()
的第二行输出中。
切换到UTC不仅会使偏移量下降,而且还会变回UTC时区。 如果你打算这样做,你根本不需要原始的.tz()
调用。 你可以做moment.utc()
。
也许你只是想改变输出格式string? 如果是这样,只需要指定format
方法的参数:
momentObj.format("YYYY-MM-DD HH:mm:ss")
关于你的代码的最后一行 – 当你使用toDate()
返回一个Date
对象时,你放弃了moment.js的行为,并回到JavaScript的行为。 JavaScript Date
对象将始终打印在正在运行的计算机的本地时区中。 没有什么可以做的。
其他一些小东西:
-
虽然构造函数可以采用
Date
,但通常最好不要使用Date
。 对于“now”,不要使用moment(new Date())
。 相反,只需使用moment()
。 两者都可以工作,但不必要的多余。 如果你正在从一个stringparsing,那么直接传递这个string。 不要试图先将它parsing为Date
。 你会发现时刻的parsing器更可靠。 -
像
MST7MDT
时区是出于向下兼容的原因。 它们源于POSIX风格的时区,其中只有less数在TZDB数据中。 除非绝对必要,否则您应该使用America/Denver
这样的密钥。
.toDate
真的不适合我,所以,这是我做的:
futureStartAtDate = new Date(moment().locale("en").add(1, 'd').format("MMM DD, YYYY HH:MM"))
希望这可以帮助
我需要在我的datestring中有时区信息。 我最初是使用moment.tz(dateStr, 'America/New_York').toString();
但是后来我开始犯错误,把那个string喂回去。
我尝试了这个moment.tz(dateStr, 'America/New_York').toDate();
但后来我失去了我需要的时区信息。
返回可用datestring的唯一解决scheme是moment.tz(dateStr, 'America/New_York').format();