vke*_*man 6 javascript datetimeoffset momentjs
假设我有一个像"01/22/2014 2:07:00 PM -08: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")
Run Code Online (Sandbox Code Playgroud)
我知道JavaScript Date()对象不是为了保留时区而设计的,但是a)和b)不存在更优雅和稳定的解决方案吗?
我想你在找moment.ParseZone.它解析片刻并保留字符串中的时区偏移量,而不是将其转换为浏览器的本地时区.
此外,您的myDateTime变量与您询问的内容不符.如果你确实已经有一个完整的ISO8601扩展时区offfset,那么它是这样的:
var m = moment.parseZone("2014-01-22T14:07:00-08:00");
Run Code Online (Sandbox Code Playgroud)
或者,如果它像你原来那样展示,那就像这样:
var m = moment("01/22/2014 2:07:00 PM -08:00",
"MM/DD/YYYY h:mm:ss A Z").parseZone();
Run Code Online (Sandbox Code Playgroud)
从那里,你可以格式化它,但你喜欢:
var s = m.format("YYYY-MM-DDTHH:mm:ss");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6243 次 |
| 最近记录: |