我有一个带有日期选择器的输入文本框,当用户选择特定日期时,日期“2014 年 12 月 9 日”将应用到输入文本框。提交时,我希望将日期以 yyyymmdd 格式传递到服务器,例如 20141209。那么如何在javascript中转换日期格式呢?
var date = new Date(Date.parse('09-Dec-2014'));
上面的代码给了我“无效日期
”。 在网上搜索解决方案,但找不到我的问题。
有人可以帮我吗?
谢谢。
我能够使用下面给出的代码获取
yyyymmdd 格式的日期。
var date = '09-Dec-2014'.split("-");
var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun','Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
for(var j=0;j<months.length;j++){
if(date[1]==months[j]){
date[1]=months.indexOf(months[j])+1;
}
}
if(date[1]<10){
date[1]='0'+date[1];
}
var formattedDate = date[2]+date[1]+date[0];
真正快速的事情可能是,拆分并生成你自己的。
由于某种原因,浏览器令人惊讶地不支持日期格式“yyyy-mm-dd”,因此失败。
所有浏览器都绝对支持以下格式,建议坚持使用其中一种以避免错误:
var d = new Date(2011, 01, 07); // yyyy, mm-1, dd
var d = new Date(2011, 01, 07, 11, 05, 00); // yyyy, mm-1, dd, hh, mm, ss
var d = new Date("02/07/2011"); // "mm/dd/yyyy"
var d = new Date("02/07/2011 11:05:00"); // "mm/dd/yyyy hh:mm:ss"
var d = new Date(1297076700000); // milliseconds
var d = new Date("Mon Feb 07 2011 11:05:00 GMT"); // ""Day Mon dd yyyy hh:mm:ss GMT/UTC
alert(d.getFullYear()+""+(d.getMonth()+1)+""+((d.getDate()<10)?"0"+d.getDate():d.getDate()));
参考:http://biostall.com/javascript-new-date-returning-nan-in-ie-or-invalid-date-in-safari
const dateStr = str => {
const months = {'jan': "01", 'feb': "02", 'mar': "03", 'apr': "04", 'may': "05", 'jun': "06", 'jul': "07",
'aug': "08", 'sep': "09", 'oct': "10", 'nov': "11", 'dec': "12"};
let year = str.match(/\d{4}$/);
let month = str.match(/[A-Za-z]{3}/);
let day = str.match(/^[1-9][0-9]?/);
let mm, dd;
if(day && month && year) {
mm = months[month[0].toLocaleLowerCase()];
dd = day[0].padStart(2, '0');
console.log("Input: " + str + ". date: " + year[0] + "-" + mm + "-" + dd);
} else if(year){
console.log("Input: " + str + ". date: " + year[0]);
}
else {
return false;
}
}
处理 MonthStr 到 MonthNumber 的对话
/**
* change datestring format from dd-MMM-yyyy to yyyymmdd
*
*/
function changeDateStringFormat(dd_mmm_yyy){
let year = dd_mmm_yyy.match(/\d{4}$/)[0];
console.log(year)
let month = dd_mmm_yyy.match(/[A-Za-z]{3}/)[0];
console.log(month)
let day = dd_mmm_yyy.match(/^\d{2}?/)[0];
console.log(day)
let mm, dd;
if(day && month && year) {
mm = (new Date(Date.parse(month +" 1, 2012")).getMonth()+1).toString().padStart(2,'0');
dd = day.padStart(2, '0');
return year + mm + dd // return yyyymmdd
}else{
return false;
}
}