【发布时间】:2014-01-24 18:38:59
【问题描述】:
假设我有一个像“01/22/2014 2:07:00 PM -08:00”这样的字符串。
我想要
- a) 使用与 UTC http://goo.gl/JTfAZq 的时间偏移将其格式化为 ISO 8601,因此它变为“2014-01-22T14:07:00-08:00”
- b) 去掉时间偏移部分,使其变为“01/22/2014 2:07:00 PM”[然后将其格式化为 ISO 8601,使其变为“2014-01-22T14:07:00”]
当然我可以使用 JavaScript 字符串函数(和正则表达式),但使用 JavaScript Date() 对象工具或 Moment.js 似乎是一种更好的方法。然而,两者都不起作用。两者都会自动将日期转换为当前系统时区(对我来说是-05:00),所以下午 2:07 变成了下午 5:07。我找到了两种方法来完成“去除时间偏移然后格式化”任务,但都看起来又丑又脆弱:
var mydateTime = "01/22/2014 2:07:00 PM -08:00";
// strip out time offset part using substring() so that Moment.js
// would think time is specified in a current zone
var myNewDateTime1 = moment(mydateTime.substring(0, mydateTime.length - 7)).format("YYYY-MM-DDTHH:mm:ss")
// or probably even worse trick - strip out time offset part using format
var myNewDateTime2 = moment(mydateTime, "MM/DD/YYYY h:mm:ss A").format("YYYY-MM-DDTHH:mm:ss")
我了解 JavaScript Date() 对象不是为保留时区而设计的,但是对于 a) 和 b) 没有更优雅和稳定的解决方案吗?
【问题讨论】:
标签: javascript momentjs datetimeoffset