【问题标题】:Get the given date format (the string specifying the format) in javascript or momentjs在 javascript 或 momentjs 中获取给定的日期格式(指定格式的字符串)
【发布时间】:2016-10-10 13:53:54
【问题描述】:

给定一个日期字符串,如何获取描述该日期字符串的格式字符串?

换一种说法,如果没有传递要使用的显式格式,我如何获得 Date() 或 MomentJS(可能每个都不同,这很好)用来解析该日期字符串的格式字符串?

所以给定'2016-01-01',它应该输出类似'YYYY-MM-DD'的东西,例如。

(我知道这是一个简单的问题,可能在某个地方有答案,但很难简洁地表达,所以我只能找到有关如何解析日期字符串或如何显示日期的问题和答案。没有关于如何输出格式本身。)

【问题讨论】:

    标签: javascript date parsing format momentjs


    【解决方案1】:

    如果没有其他信息,例如 语言环境,您将无法做到。例如,01/12/16 可能是 2016 年 1 月 12 日、2016 年 12 月 1 日或 2001 年 12 月 16 日。

    即使您知道语言环境,现实世界中也有几个地方使用了不止一种日期格式,具体取决于上下文。

    https://en.wikipedia.org/wiki/Date_format_by_country

    但是,如果您只是想确定使用多种已知格式中的哪一种来解析输入字符串,那么 moment 有一个名为 Creation Data 的 API。例如:

    var m = moment("2016/06/10", ["YYYY-MM-DD", "MM/DD/YYYY"], true);
    var f = m.creationData().format;  // "MM/DD/YYYY"
    

    【讨论】:

    • 当然,但是必须能够选择多个选项之一,因为它们可以解析这些字符串。所以,是的,存在歧义,但可以做出选择,并且由于解析器存在,因此已经隐含地做出选择。
    • 我认为这里的 formatlocale 更好,因为源系统和目标系统的位置可能没有多大帮助。 ;-)
    • @tscizzle — 没有您猜测的格式。虽然某些格式比其他格式具有更高的“成功”机会,但可以解析像 03/04/05 这样的字符串以生成至少 3 个有效但不同的日期。请参阅Be careful when falling back to Date constructor(可能应该是…回退到 Date.parse)。
    • @tscizzle - 查看我的更新答案 - 也许这会对您有所帮助。
    • 它确实有帮助,谢谢!但你知道,它确实像我最初想要的那样工作:) 即你不必将多种已知格式传递给它。这非常有效:moment('2016-01-01 00:00:00').creationData().format。它输出"YYYY-MM-DD HH:mm:ss"
    【解决方案2】:

    整合来自 Matt Johnson's answer、一些 cmets 和我自己的贡献的信息。

    使用 Moment.js(版本 2.10.7+),您可以使用 Creation Data API。 Node.js 中的类似内容:

    moment('2016-01-01 00:00:00').creationData().format
    

    输出

    'YYYY-MM-DD HH:mm:ss'
    

    就像任何日期解析一样,由于语言环境(例如,美国和欧洲之间切换月份和日期的顺序)等因素,许多日期字符串的格式存在歧义。但是上面的方法对我来说已经足够了。

    【讨论】:

      猜你喜欢
      • 2017-03-23
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      • 2017-04-09
      • 2016-06-12
      • 2015-08-20
      • 1970-01-01
      • 2014-09-28
      相关资源
      最近更新 更多