我有一个以这种格式的字符串:2012年5月7日或2012年5月17日 我的目标是解析此字符串并以此格式获取日期:yyyy-mm-dd
所以,我的例子2012年5月7日将成为2012-05-07,2012年5月17日将成为2012-05-17
我尝试过
Date.parse("7 May 2012", "yyyy-mm-dd")
但结果是:
Sun May 20 2012 00:00:00 GMT+0200 (CEST)
非常感谢你的帮助。
答案 0 :(得分:2)
我不知道你在Date.parse
调用的地方,JavaScript的Date.parse
没有第二个参数。
要执行此操作,您需要自己解析字符串,或使用MomentJS或类似字符为您执行此操作。如果你想自己解析它,你可能需要一个正则表达式和一个查找表(月份名称)。正则表达式将是这样的:
var parts = /^\s*(\d+)\s+([A-Za-z]+)\s+(\d+)\s*$/.exec(str);
...您最终会以parts[0]
为日,parts[1]
月份名称和parts[2]
年份。然后只需将月份转换为小写或大写,并使用查找表将月份名称映射到月份编号,这些内容如下:
var months = {
"jan": 0,
"january": 0,
"feb": 1,
"february": 1,
"may": 4,
// ...
"dec": 11,
"december": 11
};
var parts = /^\s*(\d+)\s+([A-Za-z]+)\s+(\d+)\s*$/.exec(str);
var dt;
if (parts) {
parts[2] = months[parts[2].toLowerCase()];
if (typeof parts[2] !== "undefined") {
dt = new Date(parseInt(parts[3], 10),
parts[2],
parseInt(parts[1], 10));
}
}
然后,您可以格式化生成的Date
对象。 (再次,有libs可以帮助那里。)
或者,当然,从来没有实际制作Date
,只是直接从parts
格式化。
答案 1 :(得分:2)
这不是Date.parse
的工作原理,它只需要一个参数,并返回一个unix时间戳。
如果您想要Date
个对象,请使用new Date
。
var myDate = new Date("7 May 2012");
// Mon May 07 2012 00:00:00
然后您可以自己解析为您想要的格式:
var year = myDate.getFullYear(),
month = myDate.getMonth() + 1, // month returns 0-11, not 1-12
day = myDate.getDate();
var dateStr = year + '-' + (month < 10 ? 0 : '') + month + '-' + (day < 10 ? 0 : '') + day;
注意:"7 May 2012"
是非标准日期格式,可能无法在所有浏览器中正常运行。
注意2 :要100%确定它可以在所有浏览器中使用,我会使用像Datejs
这样的库。
// Using Date.js
var myDate = Date.parse('7 May 2012');
var dateStr = myDate.toString('yyyy-MM-dd');