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

Javascript 如何从非标准日期字符串中解析出日期,javascript,date,momentjs,Javascript,Date,Momentjs,对于日历应用程序,我有一个从moment.js以这种字符串格式返回的日期 2017年6月16日星期五00:00:00 GMT-0500(中央夏令时) 如何将此字符串解析回'2017-06-16',使用力矩回溯指定这是无效输入。将其用作new Date()的实例会返回错误的日期 var check = moment('Fri Jun 16 2017 00:00:00 GMT-0500 (Central Daylight Time)', 'YYYY/MM/DD'); var month = ch

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

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

如何将此字符串解析回'2017-06-16',使用力矩回溯指定这是无效输入。将其用作new 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

您不需要
moment.js
。 只需使用本机构造函数

const date=新日期('2017年6月16日星期五00:00:00 GMT-0500(中央夏令时)');
const day=date.getDate();
const month=date.getMonth()+1;
const year=date.getFullYear();
控制台日志(日、月、年)
您不需要
moment.js
。 只需使用本机构造函数

const date=新日期('2017年6月16日星期五00:00:00 GMT-0500(中央夏令时)');
const day=date.getDate();
const month=date.getMonth()+1;
const year=date.getFullYear();

控制台日志(日、月、年)与日期转储相反,对象显示属性

_isValid: false
检查小提琴和控制台日志

与日期转储相反,对象显示属性

_isValid: false
检查小提琴和控制台日志

如果你真的想要
moment.js
。。。
var检查=时刻(新日期('2017年6月16日星期五00:00:00 GMT-0500(中央夏令时));
var month=check.format('M');
var day=检查格式('D');
var year=check.format('YYYY');
控制台日志(月、日、年)
如果你真的想要
矩.js
。。。
var检查=时刻(新日期('2017年6月16日星期五00:00:00 GMT-0500(中央夏令时));
var month=check.format('M');
var day=检查格式('D');
var year=check.format('YYYY');
控制台日志(月、日、年)

完全同意Jordan Running的评论


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

由于您已经有了一个力矩对象(您的
date
var),您可以简单地使用以您喜欢的格式显示力矩值

在您的情况下,您可以:

date.format('YYYY-MM-DD');
这里有一个活样本:

var日期=时刻([2017,5,16]);
console.log(日期);//打印力矩对象(如问题中提供的)
console.log(日期格式('YYYY-MM-DD');//打印格式的字符串输出(以所需格式)

完全同意Jordan Running的评论


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

由于您已经有了一个力矩对象(您的
date
var),您可以简单地使用以您喜欢的格式显示力矩值

在您的情况下,您可以:

date.format('YYYY-MM-DD');
这里有一个活样本:

var日期=时刻([2017,5,16]);
console.log(日期);//打印力矩对象(如问题中提供的)
console.log(日期格式('YYYY-MM-DD');//打印格式的字符串输出(以所需格式)

检查moment.js:控制台输出不显示字符串。它显示名为
date
的对象属性,其值为矩对象。看起来
\u d
属性是一个日期对象(显示为“Fri Jun…”,因此您可以读取它以进行调试)。如果它是一个字符串,它将以引号括起来显示。@Jordan完全同意您的看法,OP正在记录一个力矩对象<代码>\u d
是供内部使用的私有财产,不应使用。矩具有显示矩对象的字符串值的方法。请检查Moment.js:控制台输出不显示字符串。它显示名为
date
的对象属性,其值为矩对象。看起来
\u d
属性是一个日期对象(显示为“Fri Jun…”,因此您可以读取它以进行调试)。如果它是一个字符串,它将以引号括起来显示。@Jordan完全同意您的看法,OP正在记录一个力矩对象<代码>\u d
是供内部使用的私有财产,不应使用。矩有一种显示矩对象字符串值的方法。“如果需要转换现有的矩.js日期…”嗯?当您可以使用Moment的内置方法时,为什么要访问“私有”属性(
\u i
)呢?“如果您需要转换现有的Moment.js日期…”嗯?当您可以使用Moment的内置方法时,为什么要访问“私有”属性(
\u i
)?