JavaScript 日期本地化

发布于 2024-07-13 16:29:50 字数 307 浏览 9 评论 0原文

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

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

I'm working with an ASP.NET app with localization and globalization. I'm having some difficulty understanding how to get the Date() function in javascript to work properly given the user's environment. My user base is split between Mexico (spanish) and the US (english). Since the Mexico date format is dd/mm/yyyy and the english format is mm/dd/yyyy, the standard Date(strDate) javascript constructor does not work for me.

Does anyone know the best way to handle globalization/localization of a javascript Date value? I have some business rules to enforce like dateA must be 90 days prior to dateB and dateB cannot exceed today.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

往昔成烟 2024-07-20 16:29:50

看看 datejs,它可以很好地处理本地化。 它附带大量全球化设置 。 您只需加载当前 CultureInfo 的全球化设置,datejs 就会处理其余的事情。

Take a look at datejs, it handles localization very nicely. It comes with a lot of globalization setups. You just load the globalization setup of your current CultureInfo and datejs takes care of the rest.

尽揽少女心 2024-07-20 16:29:50

Matt Kruse 开发了一个非常有趣的日期库,它应该对您的特定情况有所帮助。

以下是针对您提到的问题应使用的方法的片段:

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

Matt Kruse developed a really interesting date library which should help with your particular case.

Here's a snippet of the method you should use for the issue you mentioned:

// ------------------------------------------------------------------
// 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;
    }
夕嗳→ 2024-07-20 16:29:50

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

如果您未提供自定义格式,则此函数将使用 Sys.CultureInfo.CurrentCulture 属性来确定区域性值。

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

You could use: var a = Date.parseLocale(value, formats);

If you provide no custom formats, this function uses the Sys.CultureInfo.CurrentCulture property to determine the culture value.

You can take a look on: http://msdn.microsoft.com/en-us/library/bb397521.aspx

丶视觉 2024-07-20 16:29:50

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

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

I wrote an answer to this here. It uses the toLocalString to determine MM/DD/YYY, DD/MM/YYYY,...

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文