【问题标题】:Javascript Date LocalizationJavascript 日期本地化
【发布时间】:2010-10-08 00:11:48
【问题描述】:

我正在使用具有本地化和全球化的 ASP.NET 应用程序。在给定用户环境的情况下,我很难理解如何让 JavaScript 中的 Date() 函数正常工作。我的用户群分为墨西哥(西班牙语)和美国(英语)。由于墨西哥日期格式为 dd/mm/yyyy 而英文格式为 mm/dd/yyyy,标准 Date(strDate) javascript 构造函数对我不起作用。

有谁知道处理 javascript 日期值的全球化/本地化的最佳方法?我有一些业务规则要强制执行,例如 dateA 必须比 dateB 早 90 天,并且 dateB 不能超过今天。

【问题讨论】:

    标签: asp.net javascript jquery localization globalization


    【解决方案1】:

    我在这里写了一个答案。它使用 toLocalString 来确定 MM/DD/YYY, DD/MM/YYYY,...

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

    【讨论】:

      【解决方案2】:

      您可以使用: var a = Date.parseLocale(value, formats);

      如果您不提供自定义格式,此函数将使用 Sys.CultureInfo.CurrentCulture 属性来确定文化值。

      你可以看看:http://msdn.microsoft.com/en-us/library/bb397521.aspx

      【讨论】:

        【解决方案3】:

        Matt Kruse 开发了一个really interesting date library,它应该对您的特定情况有所帮助。

        这里是您应该使用的方法的 sn-p 解决您提到的问题:

        // ------------------------------------------------------------------
        // 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;
            }
        

        【讨论】:

        • 我确实看过这个,但最终还是需要做更多的工作才能将它们放在一起。不过感谢您的帮助。
        【解决方案4】:

        看看datejs,它很好地处理了本地化。它带有a lot of globalization setups。您只需加载当前 CultureInfo 的全球化设置,而 datejs 会负责其余的工作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-13
          • 2016-02-25
          • 1970-01-01
          • 1970-01-01
          • 2015-06-14
          • 2016-12-18
          相关资源
          最近更新 更多