2009-02-17 36 views
10

我正在使用本地化和全球化的ASP.NET應用程序。我在理解如何讓JavaScript中的Date()函數根據用戶環境正常工作時遇到一些困難。我的用戶羣分爲墨西哥(西班牙)和美國(英文)。由於墨西哥日期格式爲dd/mm/yyyy,英文格式爲mm/dd/yyyy,因此標準Date(strDate)javascript構造函數對我無效。Javascript日期本地化

有誰知道處理javascript日期值的全球化/本地化的最佳方式?我有一些商業規則強制執行日期,必須在dateB前90天,而dateB不能超過今天。

回答

12

datejs看看,它處理的定位非常漂亮。它配備了a lot of globalization setups。您只需加載當前CultureInfo的全球化設置,datejs負責其餘部分。

1

Matt Kruse開發了一個really interesting date library這應該有助於您的具體情況。

下面是你應該爲你所提到的問題,使用的方法的一個片段:

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

我沒有看這個,但最終它結束了一點點更多的工作來獲得這一切都放在一起。儘管感謝您的幫助。 – RSolberg 2009-02-20 23:47:07