Вопрос по javascript, date – Как разобрать дату в формате «ГГГГммдд» в JavaScript?

15

Это нубский вопрос:

Как разобрать дату в формате"YYYYmmdd" без внешних библиотек? Если строка ввода не в этом формате, я хотел бы получитьinvalid Date (или не определено, если будет проще).

stackoverflow.com/a/2587398/650884 Pavel

Ваш Ответ

4   ответа
5

 function parse (str) {
        // validate year as 4 digits, month as 01-12, and day as 01-31 
        if ((str = str.match (/^(\d{4})(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])$/))) {
           // make a date
           str[0] = new Date (+str[1], +str[2] - 1, +str[3]);
           // check if month stayed the same (ie that day number is valid)
           if (str[0].getMonth () === +str[2] - 1)
              return str[0];
        }
        return undefined;
 }

Смотрите скрипку по адресу:http://jsfiddle.net/jstoolsmith/zJ7dM/

Недавно я написал гораздо более совершенную версию, которую вы можете найти здесь:http://jsfiddle.net/jstoolsmith/Db3JM/

Error: User Rate Limit Exceededreturn undefinedError: User Rate Limit Exceededreturn date(NaN)
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededundefinedError: User Rate Limit Exceedednew Date(NaN).
4

var date = parseInt(date);
new Date(date / 10000, date % 10000 / 100, date % 100);

или, если месяцы не равны нулю на основе источника,

new Date(date / 10000, (date % 10000 / 100) - 1, date % 100);
26
function parse(str) {
    if(!/^(\d){8}$/.test(str)) return "invalid date";
    var y = str.substr(0,4),
        m = str.substr(4,2),
        d = str.substr(6,2);
    return new Date(y,m,d);
}

Использование:

parse('20120401');

UPDATE:

Как сказал Рокет, месяцы основаны на 0 в js ... используйте это, если месяцы не основаны на 0in your string

function parse(str) {
    if(!/^(\d){8}$/.test(str)) return "invalid date";
    var y = str.substr(0,4),
        m = str.substr(4,2) - 1,
        d = str.substr(6,2);
    return new Date(y,m,d);
}

UPDATE:

Более строгая проверка на правильность даты. Принят HBP способ проверки даты.

function parse(str) {
    var y = str.substr(0,4),
        m = str.substr(4,2) - 1,
        d = str.substr(6,2);
    var D = new Date(y,m,d);
    return (D.getFullYear() == y && D.getMonth() == m && D.getDate() == d) ? D : 'invalid date';
}
Error: User Rate Limit ExceededdetailedError: User Rate Limit Exceeded
Error: User Rate Limit Exceedednew Date(y, m-1, d);Error: User Rate Limit Exceeded20120401Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded00005050Error: User Rate Limit Exceedednew Date('0000', '50', 50')Error: User Rate Limit ExceededTue Jun 09 1903 00:00:00 GMT+0300 (IDT) Michael
Error: User Rate Limit Exceeded Michael
Error: User Rate Limit Exceeded
0

ответ чтобы получить функцию, которая анализирует YYYYMMDDHHmm и вотиграть на скрипке

var parseTS=function(str){
                // validate year as 4 digits, month as 01-12, and day as 01-31
                if ((str = str.match (/^(\d{4})(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])([0-5]\d)$/))) {
                    // make a date
                    str[0] = new Date (+str[1], +str[2] - 1, +str[3], +str[4], +str[5]);
                    // check if month stayed the same (ie that day number is valid)
                    if (str[0].getMonth () === +str[2] - 1) {
                        return str[0];
                    }
                }
                return undefined;
            };

    console.log(parseTS('201501012645'));

Похожие вопросы