如何从非标准日期字符串中解析出日期

时间:2017-06-06 14:44:00

标签: javascript date momentjs

对于日历应用,我有一个以字符串格式从moment.js返回的日期。

enter image description here

  

2017年6月16日星期五00:00:00 GMT-0500(中部夏令时)

如何将此字符串解析回“2017-06-16”,使用回溯的时刻指定这是一个无效的输入。使用它作为新Date()的实例返回给我一个不正确的日期。

var check = moment('Fri Jun 16 2017 00:00:00 GMT-0500 (Central Daylight Time)', 'YYYY/MM/DD');

var month = check.format('M');
var day   = check.format('D');
var year  = check.format('YYYY');

console.log(month, day, year);
//-->invalid date

http://jsfiddle.net/t89apndd/

4 个答案:

答案 0 :(得分:1)

您不需要moment.js

只需使用原生的Date()构造函数。

const date = new Date('Fri Jun 16 2017 00:00:00 GMT-0500 (Central Daylight Time)');
const day = date.getDate();
const month = date.getMonth() + 1;
const year = date.getFullYear();
console.log(day, month, year);

如果您需要转换现有的moment.js日期:

const momentDate = ...;//insert your moment.js date here
const date = new Date(momentDate._i);
const day = date.getDate();
const month = date.getMonth();
const year = date.getFullYear();
console.log(day, month, year);

答案 1 :(得分:1)

完全同意Jordan Running的评论

  

该控制台输出未显示字符串。它显示一个名为date的对象属性,其值为Moment对象

由于您已经拥有了一个时刻对象(您的date var),因此您只需使用format()即可以您喜欢的格式显示时刻价值。

在您的情况下,您可以这样做:

date.format('YYYY-MM-DD');

这是一个实时样本:

var date = moment([2017, 5, 16]);
console.log(date); // Print moment object (like the one provided in the question)
console.log(date.format('YYYY-MM-DD')); // Print string output of format (in the desired format)
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

答案 2 :(得分:0)

如果确实想要moment.js ...

&#13;
&#13;
var check = moment(new Date('Fri Jun 16 2017 00:00:00 GMT-0500 (Central Daylight Time)'));

var month = check.format('M');
var day   = check.format('D');
var year  = check.format('YYYY');

console.log(month, day, year);
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
&#13;
&#13;
&#13;

答案 3 :(得分:-1)

与您的转储日期相反,该对象会显示属性

_isValid: false

检查小提琴和控制台日志 https://jsfiddle.net/s6x87u1p/