MomentJS:如何解析MM / DD / YYYY&中的日期DD / MM / YYYY

时间:2017-07-07 16:09:14

标签: javascript datetime momentjs

我如何在两者中使用moment.js:澳大利亚&美国的时间格式?

例如:

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

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

您可以在此处查看:

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

3 个答案:

答案 0 :(得分:7)

解析器假设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 :(得分:2)

在你的小提琴中,你使用了一个非常古老的时刻(2.2.1),我建议将它升级到最新版本(2.18.1)。

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

  

弃用警告:提供的值不是公认的RFC2822或ISO格式。时刻构造回落到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的方式取决于格式数组参数中格式的顺序。

这里有一些代码片段:



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>
&#13;
&#13;
&#13;

答案 2 :(得分: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/