Как заставить javascript Date.parse понимать короткие годы? - PullRequest
6 голосов
/ 12 июля 2010

Я заметил, Date.Parse не может обрабатывать только 2-значные даты.

Скажем, у меня есть

mm/dd/yy = 7/11/20

При анализе даты будет думать, что это = 7/11/1920.Можете ли вы установить его, чтобы использовать год две тысячи?Как-то странно, у меня есть инструмент выбора даты jquery ui, и если вы введете 7/11/20, он поймет 2020.

Так что было бы неплохо, если бы Date.parse мог не отставать. Я бы предпочел, чтобы они оба не знали, что происходит, или оба знали, что происходит, тогда у кого-то было бы то, что знает, и то, которое не знает.

Ответы [ 4 ]

5 голосов
/ 12 июля 2010

Не то, чтобы я знал.Но вы всегда можете настроить год:

YourDate="7/11/20";
DateObj=new Date(YourDate.replace(/(\d\d)$/,"20$1"));

alert(DateObj);

Этот код в действии.

Редактировать: Следующий код будет обрабатывать как полный, так икороткие годы:

YourDate="7/11/2020";
DateObj=new Date(YourDate.replace(/\/(\d\d)$/,"/20$1"));

alert(DateObj);

Этот код в действии.

0 голосов
/ 14 октября 2016

Вот мое решение:

function parseDate(stringValue)
{
    var date = new Date(stringValue);
    if (!isNaN(date.getTime()))
    {
        // if they typed the year in full then the parsed date will have the correct year, 
        // if they only typed 2 digits, add 100 years to it so that it gets translated to this century
        if (stringValue.indexOf(date.getFullYear()) == -1)
        {
            date.setFullYear(date.getFullYear() + 100);
        }

        return date;
    }
    else
    {
        return null;
    }
}
0 голосов
/ 12 июля 2010

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

var date = '7/11/20';
var idx = date.lastIndexOf('/') + 1;
date = date.substr(0,idx) + '20' + date.substr(idx);
var result = Date.parse(date);​
alert(result);

или эта версия, которая сначала будет проверять формат YYYY.

var date = '7/11/2020'; 
var idx = date.lastIndexOf('/') + 1;
if(date.substr(idx).length < 4) {
    date = date.substr(0,idx) + '20' + date.substr(idx);
}
var result = Date.parse(date);
alert(new Date(result))​;​
0 голосов
/ 12 июля 2010

Таким образом, ваш вопрос заключается в том, можете ли вы изменить способ работы Date.parse, чтобы двузначные даты с низким номером интерпретировались как даты после 2000 года?

Да, это можно сделать, просто теньDate.parse с вашей собственной функцией синтаксического анализа.

// don't do this!
Date.parse = function (str) { /* your parse routine here */ }

Конечно, вообще очень плохая идея скрывать свойства (в том числе свойства методов, называемые свойствами функции) объектов хоста, потому что это приведет к некорректному поведениюдругие сценарии, которые ожидают, что эти свойства будут работать определенным образом.

Также плохая идея использовать двухзначные даты, но это может быть вне вашего контроля.Если это не зависит от вас, я бы посоветовал просто забыть двухзначные даты и использовать вместо этого полное значение года.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...