我如何在两者中使用moment.js:澳大利亚&美国的时间格式?
例如:
07/08/2017
- 适用于两种时间格式,但是!
30/08/2017
- 对于moment.js无效,但我可以拥有这样的dateTime
您可以在此处查看:
答案 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;
答案 2 :(得分:1)
通过调用时刻的第二个参数指定格式
var now2 = moment('30/08/2017', 'DD/MM/YYYY').format('MMM DD h:mm A');
否则暂时无法知道