问题问题:我有一个日期字符串(可以是任何格式31/10/93
或10/31/93
或93/10/31
),并希望将其转换为日期对象(UTC格式)。
如何使用momentjs做到这一点?
我尝试了moment.utc(date)
但没有结果。
有关如何执行此操作的任何建议吗?
答案 0 :(得分:2)
您可以按照here所述的多种格式解析字符串。
如果需要,还可以传递locale参数。
以下代码显示了您问题的可能解决方案:
var arr = ['31/10/93','10/31/93','93/10/31'];
for(var i=0; i< arr.length; i++){
var m = moment.utc(arr[i], ['DD/MM/YY', 'MM/DD/YY', 'YY/MM/DD']);
console.log(m.format('DD MMMM YYYY')); // 31 October 1993
}
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>
这适用于您提供的输入,但可能会为01/02/93
之类的输入提供未预见的结果。此字符串可以代表1 February 1993
和2 January 1993
。
建议的代码会显示01 February 1993
,因为正如文档中所述:
Moment使用一些简单的启发式方法来确定要使用的格式。按顺序:
- 首选格式,使有效日期超过无效日期。
- 首选格式解析更多的字符串而不是更少的格式,而不是使用更少的格式,即更喜欢更严格的解析。
- 首选阵列中的格式
如果你需要一个来自时刻对象的JavaScript日期,你可以使用toDate()
方法,而如果你需要Unix时间戳,你可以使用valueOf()
或unix()
。
发表评论后,我建议您使用moment.localeData()
获取“本地化”格式。使用longDateFormat('L')
,您可以获得本地化格式字符串,然后在解析函数中使用它。例如,longDateFormat('L')
将为MM/DD/YYYY
区域设置返回us
,为DD/MM/YYYY
返回it
。代码示例:
var s = '01/02/93';
function formatSample(s){
var ldf = moment.localeData().longDateFormat('L');
return moment.utc(s, [ldf, 'YY/MM/DD']).format('DD MMMM YYYY');
}
moment.locale('us');
formatSample(s); // 02 January 1993
moment.locale('it');
formatSample(s); // 01 febbraio 1993
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment-with-locales.min.js"></script>
答案 1 :(得分:0)
如果你不了解格式,那么你可以做到。 你必须提供当前构造函数的格式,因为 1/2/93可以是1月的第二个或第二个。 没有办法让moment.js正确地为你做出决定。
有关详细信息,请参阅以下部分