奇怪的ISO格式化Datestring到Javascript日期

时间:2017-10-12 21:01:58

标签: javascript momentjs

我有一个像这样的Datestring:20171010T022902.000Z我需要从这个字符串创建Javascript Date。 new Date('20171010T022902.000Z')会返回Invalid Date

我看到为此目的可以使用moment.js,但我不确定如何为我给出的示例指定相应的格式。我从另一个帖子中找到了这个例子:

var momentDate = moment('1890-09-30T23:59:59+01:16:20', 'YYYY-MM-DDTHH:mm:ss+-HH:mm:ss');
var jsDate = momentDate.toDate();

问题:

如何以这种格式从给定的Datestring创建JavaScript日期:20171010T022902.000Z(使用时刻)?

2 个答案:

答案 0 :(得分:3)

您的输入(age_high_or_low)与已知的ISO 8601匹配,因此您只需使用moment(String)解析方法即可。在文档的Supported ISO 8601 strings部分,您会找到:

20171010T022902.000Z

然后您可以使用toDate()方法

  

获取Moment.js包装的本机Date对象的副本

您的代码可能如下所示



20130208T080910.123      # Short date and time up to ms

var m = moment('20171010T022902.000Z');
console.log( m.format() );
console.log( m.toDate() );




请注意,此代码未显示弃用警告(在Bergi评论中引用),因为您输入的是ISO 8601已知格式。请参阅this guide以了解有关此警告的更多信息。

此外&#34;默认情况下,片刻按当地时间&#34; 分析并显示here所以<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>将显示您输入的UTC的本地值(format()20171010T022902.000Z结尾)。请参阅moment.utc()utc()Local vs UTC vs Offset guide,详细了解UTC时刻模式。

答案 1 :(得分:0)

我认为你可以在没有moment.js的情况下做到这一点。

基本上使用正则表达式的捕获组提取所需的部分,然后重新排列为正确的新日期格式。

var dtstr = '20171010T022902.000Z';

var dt = new Date(
  dtstr.replace(/^(\d{4})(\d{2})(\d{2})T(\d{2})(\d{2})(\d{2})(\.\d{3}Z)$/,
    "$1-$2-$3T$4:$5:$6$7"));
  
console.log(dt);
console.log(dt.toString());

无论如何你都在使用moment.js,这应该有效 - &gt;

var dt = moment("20171010T022902.000Z", "YYYYMMDDTHHmmss.SSSSZ");

console.log(dt.toString());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.1/moment.min.js"></script>