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

And*_*edo 5 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)
Run Code Online (Sandbox Code Playgroud)

这是最简单的方法吗?

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

Sha*_*tta 10

由于您的问题是如何在字符串(dd/mm/yyyyto mm/dd/yyyy)中将月份与日期交换,这就是答案:

var dateString = "25/04/1987";
dateString = dateString.substr(3, 2)+"/"+dateString.substr(0, 2)+"/"+dateString.substr(6, 4);
Run Code Online (Sandbox Code Playgroud)

但是,如果要创建new Date()对象,则必须根据ISO 8601格式(dd/mm/yyyyto 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);
Run Code Online (Sandbox Code Playgroud)


fre*_*ish 5

这个怎么样?

value = value.split("/");
var d = new Date(value[2], parseInt(value[1], 10)-1, value[0]);
Run Code Online (Sandbox Code Playgroud)

您必须1从月份中减去,因为 JavaScript 从0.


And*_*edo 4

感谢 CBroe,我使用了它Array.reverse并且它与我的测试用例一起工作。

只是用reverse()替换了**swap:

function createDateObject(value) {
    try {
        return new Date(value.split('/').reverse().join('/'));
    }
    catch(e) {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

它正确创建日期,但允许创建无效日期,例如 Feb/30/2014。
所以我还必须使用这个答案来验证字符串:

function createDateObject(value) {
    try {
        string formatted = value.split('/').reverse().join('/');
        return isValidDate(formatted) ? new Date(formatted) : null;
    } catch(e) {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)