在Javascript中交换日期字符串中的一天

时间:2014-01-30 13:03:53

标签: javascript date

我有一个格式为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)

这是最简单的方法吗?

如果我能在一行中完成,我不想创建很多临时变量......

5 个答案:

答案 0 :(得分:9)

由于您的问题是如何在字符串(dd/mm/yyyymm/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]);
}