我一直在看这里有很多类似的问题,但事实是我没有成功,直到我遇到一个令我高兴的答案,但差点就是这样:
function convertDate (userDate) {
// convert parameter to a date
var returnDate = new Date(userDate);
// get the day, month and year
var y = returnDate.getFullYear();
var m = returnDate.getMonth() + 1;
var d = returnDate.getDay();
// converting the integer values we got above to strings
y = y.toString();
m = m.toString();
d = d.toString();
// making days or months always 2 digits
if (m.length === 1) {
m = '0' + m;
}
if (d.length === 1) {
d = '0' + d;
}
// Combine the 3 strings together
returnDate = y + m + d;
return returnDate;
}
这可能是显而易见的,但输出中的月份和日期不能100%工作,我只是不了解原因。
输出示例:
convertDate("12/31/2014");
"20141203"
convertDate("02/31/2014");
"20140301"
编辑:
为getDay
替换getDate
似乎可以解决问题。
这个答案也适合我的情况:
function convertDate (userDate) {
return userDate.substr(6,4) + userDate.substr(3,2) + userDate.substr(0,2);
}
答案 0 :(得分:5)
这是因为getDay
会返回0到6周的工作日。您应该使用getDate
代替。
你的第二个例子也是一个错误的日期,因为二月从来没有31天。
也许你应该尝试给[momentjs]一个机会。它确实有助于使用format
来处理日期和在格式之间进行转换。
答案 1 :(得分:2)
即使您为getDate替换getDay函数,您的代码也无法正常运行,因为您使用的是无效的日期格式。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse#Fall-back_to_implementation-specific_date_formats
一般来说,如果你只需要处理这一种日期格式,将来不会改变它,你的功能可以简单:
function convertDate (userDate) {
return userDate.substr(6,4) + userDate.substr(3,2) + userDate.substr(0,2);
}
答案 2 :(得分:1)
将代码var d = returnDate.getDay();
更改为var d = returnDate.getDate();
function convertDate (userDate) {
// convert parameter to a date
var returnDate = new Date(userDate);
// get the day, month and year
var y = returnDate.getFullYear();
var m = returnDate.getMonth() + 1;
var d = returnDate.getDate();
// converting the integer values we got above to strings
y = y.toString();
m = m.toString();
d = d.toString();
// making days or months always 2 digits
if (m.length === 1) {
m = '0' + m;
}
if (d.length === 1) {
d = '0' + d;
}
// Combine the 3 strings together
returnDate = y + m + d;
return returnDate;
}