使用momentjs的日期字符串到Date

时间:2016-09-06 03:11:02

标签: javascript momentjs

问题问题:我有一个日期字符串(可以是任何格式31/10/9310/31/9393/10/31),并希望将其转换为日期对象(UTC格式)。

如何使用momentjs做到这一点?

我尝试了moment.utc(date)但没有结果。

有关如何执行此操作的任何建议吗?

2 个答案:

答案 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 19932 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正确地为你做出决定。

有关详细信息,请参阅以下部分

http://momentjs.com/docs/#/parsing/string-format/