Javascript Дата Локализация - PullRequest
       8

Javascript Дата Локализация

10 голосов
/ 17 февраля 2009

Я работаю с приложением ASP.NET с локализацией и глобализацией. У меня возникают трудности с пониманием того, как заставить функцию Date () в javascript работать должным образом, учитывая среду пользователя. Моя база пользователей разделена между Мексикой (испанский) и США (английский). Поскольку формат даты в Мексике - дд / мм / гггг, а английский - мм / дд / гггг, стандартный конструктор JavaScript (strDate) у меня не работает.

Кто-нибудь знает лучший способ справиться с глобализацией / локализацией значения Date в JavaScript? У меня есть некоторые бизнес-правила для соблюдения, например, dateA должна быть за 90 дней до dateB, а dateB не может превышать сегодня.

Ответы [ 4 ]

12 голосов
/ 17 февраля 2009

Посмотрите на datejs , он очень хорошо обрабатывает локализацию. Он поставляется с множеством настроек глобализации . Вы просто загружаете настройки глобализации для своего текущего CultureInfo, а datejs позаботится обо всем остальном.

1 голос
/ 17 февраля 2009

Мэтт Крузе разработал действительно интересную библиотеку дат , которая должна помочь в вашем конкретном случае.

Вот фрагмент метода, который вы должны использовать для упомянутой проблемы:

// ------------------------------------------------------------------
// parseDate( date_string [, prefer_euro_format] )
//
// This function takes a date string and tries to match it to a
// number of possible date formats to get the value. It will try to
// match against the following international formats, in this order:
// y-M-d   MMM d, y   MMM d,y   y-MMM-d   d-MMM-y  MMM d
// M/d/y   M-d-y      M.d.y     MMM-d     M/d      M-d
// d/M/y   d-M-y      d.M.y     d-MMM     d/M      d-M
// A second argument may be passed to instruct the method to search
// for formats like d/M/y (european format) before M/d/y (American).
// Returns a Date object or null if no patterns match.
// ------------------------------------------------------------------

function parseDate(val) {
    var preferEuro=(arguments.length==2)?arguments[1]:false;
    generalFormats=new Array('y-M-d','MMM d, y','MMM d,y','y-MMM-d','d-MMM-y','MMM d');
    monthFirst=new Array('M/d/y','M-d-y','M.d.y','MMM-d','M/d','M-d');
    dateFirst =new Array('d/M/y','d-M-y','d.M.y','d-MMM','d/M','d-M');
    var checkList=new Array('generalFormats',preferEuro?'dateFirst':'monthFirst',preferEuro?'monthFirst':'dateFirst');
    var d=null;
    for (var i=0; i<checkList.length; i++) {
        var l=window[checkList[i]];
        for (var j=0; j<l.length; j++) {
            d=getDateFromFormat(val,l[j]);
            if (d!=0) { return new Date(d); }
            }
        }
    return null;
    }
0 голосов
/ 09 августа 2013

Я написал ответ на это здесь. Он использует toLocalString для определения ММ / ДД / ГГГ, ДД / ММ / ГГГГ, ...

https://stackoverflow.com/a/18154195/119741

0 голосов
/ 16 апреля 2010

Вы можете использовать: var a = Date.parseLocale (значение, форматы);

Если вы не указали пользовательские форматы, эта функция использует свойство Sys.CultureInfo.CurrentCulture для определения значения культуры.

Вы можете посмотреть: http://msdn.microsoft.com/en-us/library/bb397521.aspx

...