我有一个格式为dd / MM / yyyy的日期字符串,我想从这个字符串创建一个Date对象。 new Date(dd/MM/yyyy)
无效。
我有这个代码,显然不起作用:
function createDateObject(value){
try{
return new Date(value.split('/').**swap(0, 1)**.join('/'));
}
catch(){
return null;
}
}
createDateObject('31/01/2014') => Fri Jan 31 2014 00:00:00 GMT-0200 (Local Daylight Time)
这是最简单的方法吗?
如果我能在一行中完成,我不想创建很多临时变量......
答案 0 :(得分:9)
由于您的问题是如何在字符串(dd/mm/yyyy
到mm/dd/yyyy
)中将月份与日期交换,这就是答案:
var dateString = "25/04/1987";
dateString = dateString.substr(3, 2)+"/"+dateString.substr(0, 2)+"/"+dateString.substr(6, 4);
但是,如果您要创建new Date()
对象,则必须根据ISO 8601格式(dd/mm/yyyy
更改为yyyy-mm-dd
)来更改字符串:
var dateString = "25/04/1987";
dateString = dateString.substr(6, 4)+"-"+dateString.substr(3, 2)+"-"+dateString.substr(0, 2);
var date = new Date(dateString);
答案 1 :(得分:4)
这个怎么样?
value = value.split("/");
var d = new Date(value[2], parseInt(value[1], 10)-1, value[0]);
您必须从月份中减去1
,因为JavaScript会从0
计算几个月。
答案 2 :(得分:4)
感谢CBroe,我使用了Array.reverse
,它与我的测试用例一起工作。
刚刚用reverse()替换了** swap:
function createDateObject(value) {
try {
return new Date(value.split('/').reverse().join('/'));
}
catch(e) {
return null;
}
}
正确创建日期,但要创建无效日期,例如2014年2月30日 所以我还必须使用这个Answer验证字符串:
function createDateObject(value) {
try {
string formatted = value.split('/').reverse().join('/');
return isValidDate(formatted) ? new Date(formatted) : null;
} catch(e) {
return null;
}
}
答案 3 :(得分:0)
如果您要将字符串传递给date constructor,建议您使用ISO8601 format。试试这个。
function createDateObject(value) {
try {
var parts = value.split('/');
return new Date(parts[2] + "-" + parts[1] + "-" + parts[0]);
} catch () {
return null;
}
}
答案 4 :(得分:0)
您可以使用拆分来切换您的项目:
function createDateObject(value){
var splitDate = value.split("/");
return new Date(splitDate[2],splitDate[1],splitDate[0]);
}