Как преобразовать американский формат даты в европейский

от 1_

to : 2011-05-19

Мне нужно, чтобы он вызывал ошибку, когда обнаруживает, что он не может быть реальным, например 5/40/2011 и т. д. Существуют ли какие-либо библиотеки, которые делают это хорошо?


person rsk82    schedule 19.05.2011    source источник
comment
Не существует такого формата, как европейский формат, поскольку в него вовлечено множество различных групп и культур.   -  person Brian Scott    schedule 19.05.2011
comment
так какое правильное имя для этого: 2011-05-19 формат даты?   -  person rsk82    schedule 14.08.2011
comment
Это называется Big-Endian en.wikipedia.org/wiki/Date_format_by_country   -  person Shamis Shukoor    schedule 04.07.2012
comment
связанные stackoverflow.com/a/2258351/759452   -  person Adrien Be    schedule 17.06.2014


Ответы (3)


Как насчет Datejs — библиотеки дат с открытым исходным кодом? Конкретно:

http://code.google.com/p/datejs/wiki/APIDocumentation#parseExact

Date.parseExact("10/15/2004", "M/d/yyyy");  // The Date of 15-Oct-2004
Date.parse("15-Oct-2004", "d-MMM-yyyy");    // The Date of 15-Oct-2004
Date.parse("2004.10.15", "yyyy.MM.dd");     // The Date of 15-Oct-2004
Date.parseExact("10/15/2004", ["M/d/yyyy", "MMMM d, yyyy"]); // The Date of 15-Oct-2004

Возвращаемое значение {Date} Объект Date или null, если строку нельзя преобразовать в Date.

or

http://code.google.com/p/datejs/wiki/APIDocumentation#validateDay

Date.validateDay(15, 2007, 1);  // true, 15-Feb-2007
Date.validateDay(31, 2007, 10); // false, throws RangeError exception

Возвращаемое значение {Boolean} true, если находится в пределах диапазона, иначе false.

person Alex KeySmith    schedule 19.05.2011
comment
Могу ли я оставить отзыв о -1, пожалуйста? Я понимаю, что это очень-очень старый ответ, если у кого-то есть что прокомментировать, поделитесь. - person Alex KeySmith; 16.07.2019

возможно, это не лучшее решение, но вы можете попробовать простой способ, например:

var from="5/19/2011";
var temp = from.split("/");
var to = temp[2] + "-" + temp[0] + "-" + temp[1];
person bungdito    schedule 19.05.2011

Будь проще:

[изменить] правильно, вы тоже хотели чек, поэтому добавили fn chkDat:

function zeroPad(n){
  return (parseInt(n,10)<10 ? '0' : '') + n;
}

var usdat = '5/19/2011'.split('/')
    ,eudat = [usdat[2],zeroPad(usdat[0]),zeroPad(usdat[1])];

alert(chkDat(usdat,eudat); //=> true
alert(eudat.join('-'));    //=> '2011-05-19'

function chkDat(orig,eu){
   var eu = new Date(eu.join('/'));
   return   eu.getMonth()+1 === parseInt(orig[0],10)
         && eu.getDate() === parseInt(orig[1],10)
         && eu.getFullYear() === parseInt(orig[2],10)
   ;
}

Обратите внимание, формат даты, который вам нужен, называется Календарная дата (ISO 8601).

person KooiInc    schedule 19.05.2011