2014-01-30 3 views
2

У меня есть строка даты в формате dd/MM/yyyy, и я хочу создать объект Date из этой строки. new Date(dd/MM/yyyy) не будет работать ..Swap month with day in date string в Javascript

У меня есть этот код, который явно не работает:

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) 

Какой самый простой способ сделать это?

Я не хотел бы создать много временных переменных, если я мог бы сделать это в одной строке ...

+1

Вы можете использовать Momentjs (http://momentjs.com) или сахара (http://sugarjs.com/dates) для даты манипуляции. – Jason

+0

momentjs.com, может быть? – Kroltan

+1

Просто конкатенируйте элементы массива, которые вы получаете от расщепления в правильном порядке ... – CBroe

ответ

4

Благодаря CBroe я Array.reverse и работал с моими тестовыми случаями.

Просто заменить ** своп с реверсом():

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

Он создает даты правильно, но пусть неверные даты, чтобы быть созданы, например, февраль/30/2014.
Так что я также должен проверить строку, используя этот Answer:

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

Поскольку ваш вопрос заключается в том, чтобы поменять месяц со дня в строке (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); 
4

Как насчет этого?

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

Вы должны вычесть 1 из месяца, потому что JavaScript отсчитывает месяцев от 0.

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; 
    } 
} 
0

Вы можете использовать раскол в включатель ваших деталей как это:

function createDateObject(value){ 
    var splitDate = value.split("/"); 
    return new Date(splitDate[2],splitDate[1],splitDate[0]); 
}