Расширение Date.parse JavaScript для обеспечения DD/MM/YYYY (неамериканские отформатированные даты)?

Я предложил это решение расширения JavaScript Date.parse функция для обеспечения дат, отформатированных в DD/MM/YYYY (скорее затем американский стандарт [и значение по умолчанию] MM/DD/YYYY):

(function() {
    var fDateParse = Date.parse;

    Date.parse = function(sDateString) {
        var a_sLanguage = ['en','en-us'],
            a_sMatches = null,
            sCurrentLanguage,
            dReturn = null,
            i
        ;

            //#### Traverse the a_sLanguages (as reported by the browser)
        for (i = 0; i < a_sLanguage.length; i++) {
                //#### Collect the .toLowerCase'd sCurrentLanguage for this loop
            sCurrentLanguage = (a_sLanguage[i] + '').toLowerCase();

                //#### If this is the first English definition
            if (sCurrentLanguage.indexOf('en') == 0) {
                    //#### If this is a definition for a non-American based English (meaning dates are "DD MM YYYY")
                if (sCurrentLanguage.indexOf('en-us') == -1 &&      // en-us = English (United States) + Palau, Micronesia
                    sCurrentLanguage.indexOf('en-ca') == -1 &&      // en-ca = English (Canada)
                    sCurrentLanguage.indexOf('en-ph') == -1 &&      // en-ph = English (Philippians)
                    sCurrentLanguage.indexOf('en-bz') == -1         // en-bz = English (Belize)
                ) {
                        //#### Setup a oRegEx to locate "## ## ####" (allowing for any sort of delimiter except a '\n') then collect the a_sMatches from the passed sDateString
                    var oRegEx = new RegExp("(([0-9]{2}|[0-9]{1})[^0-9]*?([0-9]{2}|[0-9]{1})[^0-9]*?([0-9]{4}))", "i");
                    a_sMatches = oRegEx.exec(sDateString);
                }

                    //#### Fall from the loop (as we've found the first English definition)
                break;
            }
        }

            //#### If we were able to find a_sMatches for a non-American English "DD MM YYYY" formatted date
        if (a_sMatches != null) {
            var oRegEx = new RegExp(a_sMatches[0], "i");
                //#### .parse the sDateString via the normal Date.parse function, but replacing the "DD?MM?YYYY" with "YYYY/MM/DD" beforehand
                //####     NOTE: a_sMatches[0]=[Default]; a_sMatches[1]=DD?MM?YYYY; a_sMatches[2]=DD; a_sMatches[3]=MM; a_sMatches[4]=YYYY
            dReturn = fDateParse(sDateString.replace(oRegEx, a_sMatches[4] + "/" + a_sMatches[3] + "/" + a_sMatches[2]));
        }
            //#### Else .parse the sDateString via the normal Date.parse function
        else {
            dReturn = fDateParse(sDateString);
        }

            //#### 
        return dReturn;
    }
})();

В моем фактическом (dotNet) кодируют, я собираю массив a_sLanguage через:

a_sLanguage = '<% Response.Write(Request.ServerVariables["HTTP_ACCEPT_LANGUAGE"]); %>'.split(',');

Теперь, я не уверен свой подход к определению местоположения "нас-en" / и т.д. является самым надлежащим. В значительной степени это - просто области американских и текущих/прежних США, на которые влияют (Палау, Микронезия, Филиппины) + Белиз и Канада, которые используют броский MM/DD/YYYY формат (я американец, таким образом, я могу назвать это броским =). Таким образом, можно было справедливо утверждать что, если Локаль не является "en-us" / и т.д. сначала, то DD/MM/YYYY должен использоваться. Мысли?

Как примечание стороны... Я "рос" в Perl, но это было крошечное в то время как, так как я сделал много тяжелого подъема в RegEx. То выражение выглядит правильным всем?

Это походит на большую работу, но на основе моего исследования это действительно о лучшем способе пойти о включении DD/MM/YYYY даты в JavaScript. Существует ли более легкий/больше более горький путь?

PS - После перечитывания этого сообщения непосредственно перед представлением... Я понял, что это - больше, "может Вы кодировать рассмотреть это" скорее затем вопрос (или, ответ встраивается в вопросе). Когда я начал писать это, это не было мое намерение закончиться здесь =)

7
задан Campbeln 9 June 2010 в 07:49
поделиться

1 ответ

Я бы использовал Datejs . Вы можете напрямую загрузить версию, подходящую для данного языкового кода ISO (например, date-en-CA.js или date-en-GB.js). Только заглавные буквы отличаются.

5
ответ дан 7 December 2019 в 12:15
поделиться
Другие вопросы по тегам:

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