我有一个像这样的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
(使用时刻)?
答案 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>