使用Moment.js我无法将正确的时刻对象转换为带时区的日期对象 . 我无法得到正确的日期 .
Example:
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())
6 回答
由于momentjs无法控制javascript日期对象,因此我找到了解决方法 .
这将为您提供转换时间的javascript日期对象
使用此选项将矩形对象转换为日期对象:
从http://momentjs.com/docs/#/displaying/as-javascript-date/
产量:
只要您使用the data for the zones you want初始化moment-timezone,您的代码就会按预期工作 .
您正确地将时刻转换为时区,这反映在
momentObj.format()
的第二行输出中 .切换到UTC并不会这样做,你根本不需要原来的
.tz()
呼叫 . 你可以做moment.utc()
.也许你只是想改变输出格式字符串?如果是这样,只需指定
format
方法所需的参数:关于代码的最后一行 - 当你使用
toDate()
返回Date
对象时,你放弃了moment.js的行为并回到了JavaScript的行为 . 一个JavaScriptDate
对象将始终打印在计算机的本地时区中___209619_什么都没有.js可以做到这一点 .其他几件小事:
虽然矩构造函数可以采用
Date
,但通常最好不要使用Date
. 对于"now",请勿使用moment(new Date())
. 相反,只需使用moment()
. 两者都可以工作,但它首先尝试将其解析为Date
. 你会发现瞬间的解析器更可靠 .时区如
MST7MDT
是出于向后兼容的原因 . 它们来自POSIX风格的时区,其中只有少数属于TZDB数据 . 除非绝对必要,否则应使用America/Denver
等密钥 ..toDate
并没有真正为我工作,所以,这就是我所做的:希望这可以帮助
我需要在日期字符串中包含时区信息 . 我最初使用的是
moment.tz(dateStr, 'America/New_York').toString();
,但后来我开始收到关于将该字符串反馈回来的错误 .我尝试了
moment.tz(dateStr, 'America/New_York').toDate();
,但后来我丢失了我需要的时区信息 .返回可用日期字符串 with timezone 的唯一解决方案是
moment.tz(dateStr, 'America/New_York').format();
片刻已于06/2018更新了js lib .
如果你可以自由使用Angular5,那么最好使用datePipe功能,而不是时区功能 . 我必须使用moment.js,因为我的项目仅限于Angular2 .