【问题标题】:MomentJS: how to parse dates in MM/DD/YYYY & DD/MM/YYYYMoment JS:如何将 MM/DD/YYYY 中的日期解析为 DD/MM/YYYY
【发布时间】:2017-12-12 00:33:10
【问题描述】:

如何同时使用 moment.js:澳大利亚和美国时间格式?

例如:

07/08/2017 - 适用于两种时间格式,但是!

30/08/2017 - 对 moment.js 无效,但我可以有这样的 dateTime

你可以在这里查看:

http://jsfiddle.net/rLjQx/2135/

【问题讨论】:

  • 了解虽然07/08/2017 在两种格式中都是有效,但它代表两个完全不同的日期(7 月 8 日和 8 月 7 日)。

标签: javascript datetime momentjs


【解决方案1】:

通过第二个参数指定格式的时刻调用

var now2 = moment('30/08/2017', 'DD/MM/YYYY').format('MMM DD h:mm A');

否则一时无从得知

此处的相关文档:https://momentjs.com/docs/#/parsing/string-format/

更正小提琴:http://jsfiddle.net/wu6wwsvp/

【讨论】:

  • 现在怎么称呼?像 moment() 但有格式?
  • 我需要类似的东西:moment(now, 'DD/MM')
  • 我觉得这是一个不同的问题,但我认为您正在寻找:moment().format('DD/MM'); 新时刻默认为浏览器提供的当前日期/时间
  • moment().format('DD/MM') 将输出字符串...不是对象
  • 所以你只想要当前日期/时间的片刻?那只是moment();
【解决方案2】:

解析器假设 XX-XX-XXXX 形式的数字代表 DD-MM-YYYY。如果您希望它接受 MM-DD-YYYY,那么您需要指定此项。

例如var now2 = moment('08/30/2017', 'MM-DD-YYYY').format('MMM DD h:mm A');

您还可以指定一个您希望它接受的不同格式的数组,以便它能够同时识别这两种格式:

var now2 = moment('08/30/2017', ['DD-MM-YYYY', 'MM-DD-YYYY']).format('MMM DD h:mm A');

【讨论】:

  • +1,但请注意,moment 解析器(使用最新版本)只是退回到依赖于浏览器的new Date(string)(因此它是不一致的)。此外,只需修复示例中的格式,因为您使用 - 而不是 / 并注意格式顺序与不明确的输入相关(如问题中提到的 07/08/2017)。
  • “解析器忽略非字母数字字符”:momentjs.com/docs/#/parsing/string-format
  • 当然,但是如果你添加第三个参数来启用严格解析,你会得到一个无效的日期,我认为使用['DD-MM-YYYY', 'MM-DD-YYYY']而不是['DD/MM/YYYY', 'MM/DD/YYYY']没有任何好处,这就是我指出的方式出来:)。
  • 另外值得一提的是,数组中有效的 first 模式将被使用。对于07/08/2017,此代码会将其视为 8 月 7 日。
【解决方案3】:

在您的小提琴中,您使用的是非常旧版本的时刻 (2.2.1),我建议将其升级到最新版本 (2.18.1)。

使用较新的版本,您的控制台中会出现弃用警告

弃用警告:提供的值不是可识别的 RFC2822 或 ISO 格式。 moment 构造回退到 js Date(),这在所有浏览器和版本中并不可靠。不鼓励使用非 RFC2822/ISO 日期格式,并将在即将发布的主要版本中删除。更多信息请参考http://momentjs.com/guides/#/warnings/js-date/

点击链接(和moment(String) 文档),您会发现必须指定格式才能正确解析字符串。

正如 Billy Reilly 建议的那样,您可以使用 moment(String, String[]) 解析功能。请记住:

2.3.0 版本开始,Moment 使用一些简单的启发式方法来确定要使用的格式。顺序:

  • 更喜欢产生有效日期的格式而不是无效日期。
  • 更喜欢解析更多字符串而不是更少并且使用更多格式而不是更少的格式,即更喜欢更严格的解析。
  • 首选数组中较早的格式。

所以07/08/2017 的解释方式取决于格式数组 参数中格式的顺序。

这里是一个带有一些示例的 sn-p:

var now = moment('30/08/2017', ['MM/DD/YYYY','DD/MM/YYYY']);
var now2 = moment('08/30/2017', ['MM/DD/YYYY','DD/MM/YYYY']);
var now3 = moment('07/08/2017', ['MM/DD/YYYY','DD/MM/YYYY']);

console.log(now.format('MMM DD h:mm A')); // Aug 30 12:00 AM
console.log(now2.format('MMM DD h:mm A'));// Aug 30 12:00 AM
console.log(now3.format('MMM DD h:mm A'));// Jul 08 12:00 AM

var now4 = moment('30/08/2017', ['DD/MM/YYYY','MM/DD/YYYY']);
var now5 = moment('08/30/2017', ['DD/MM/YYYY','MM/DD/YYYY']);
var now6 = moment('07/08/2017', ['DD/MM/YYYY','MM/DD/YYYY']);

console.log(now4.format('MMM DD h:mm A')); // Aug 30 12:00 AM
console.log(now5.format('MMM DD h:mm A')); // Aug 30 12:00 AM
console.log(now6.format('MMM DD h:mm A')); // Aug 07 12:00 AM
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

【讨论】:

    猜你喜欢
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 2014-05-30
    相关资源
    最近更新 更多