【问题标题】:Strip Time Zone from a string using JavaScripty, Moment.js, etc?使用 JavaScripty、Moment.js 等从字符串中剥离时区?
【发布时间】: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


    【解决方案1】:

    我想你正在寻找moment.ParseZone。它解析时刻并保留字符串中的时区偏移量,而不是将其转换为浏览器的本地时区。

    另外,您的 myDateTime 变量与您所询问的不匹配。如果你确实已经有了一个完整的 ISO8601 扩展时区偏移,那么它是这样的:

    var m = moment.parseZone("2014-01-22T14:07:00-08:00");
    

    或者如果它像你一样,显示,然后像这样:

    var m = moment("01/22/2014 2:07:00 PM -08:00",
                   "MM/DD/YYYY h:mm:ss A Z").parseZone();
    

    从那里,您可以随意格式化它:

    var s = m.format("YYYY-MM-DDTHH:mm:ss");
    

    【讨论】:

    • 我试图编辑我上面的评论太久了,所以我把它删除了。根据您链接的文档,马特,moment.parseZone 没有第二个参数。试图解析为 moment.parseZone("01/22/2014 2:07:00 PM -08:00", "MM/DD/YYYY h:mm:ss A Z") 或 moment.parseZone("01/22/ 2014 年下午 2:07:00 -08:00");都返回_d:无效日期
    • 你是对的!不错的收获!请改用我更新的答案中的语法。我会为另一个提交一个错误。
    • "您的 myDateTime 变量与您所询问的不匹配。"马特,我修改了我的帖子来解决这个问题,谢谢。
    • 简单直接解决方案的完美答案。我喜欢这个,因为这意味着不需要创建一个带有新日期的新 var 并剥离时区。就是这么简单! moment("2017-03-22T09:07:19.000-0400").parseZone().format('MMM D, YYYY')
    猜你喜欢
    • 2010-09-19
    • 2012-09-30
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多