2011-08-24 78 views
3

我寫一段JavaScript代碼進行排序的數據表包含一個日期(包含本地化日期)等領域。例如:如何將本地化日期轉換爲JavaScript中的標準日期?

"lunes, 29 de agosto de 2011", "field1", "field2" 
"lunes, 28 de agosto de 2011", "field1", "field2"... 

雖然按日期排序,我需要通過將日期轉換爲標準的Javascript日期對象來比較日期。有沒有辦法將本地化日期轉換爲標準日期?

回答

0

您需要將您的輸入數據轉換爲DD,MM,YYYY數字格式然後給那些Date構造函數。請注意,mm是零相對。

在您的具體示例中,/(/ d {1,2})de([az] +)de(/ d {4})/的regExp將提供日期和年份作爲數字,給定數組的月份名稱,indexOf將提供月份編號。

每一種語言都需要一個特定的月表/或REG進出口。

+0

我在問如何將它們轉換成dd,mm,yy ...我需要將德語,法語,西班牙語等多個語言環境的日期轉換爲... –

0

我會做區域設置特定的月份名稱以數量(和天名,也有可能)反向映射和常見的日期格式列表。然後,您可以針對這些格式檢查每個字符串,並在匹配時解析這些值(例如,使用正則表達式),並使用提取的數據構造JavaScript日期。

下面是一些僞代碼來驗證這個想法(只是爲了說明,不打算工作):

var i18nDate = { 
    'es': { 
    'days': ['lunes', 'martes', 'miercoles', ...], 
    'months': ['enero', 'febrero', 'marzo', ...], 
    }, 
    // ... for each locale. 
}; 

var i18nFormat = { 
    'es': [ 
    new RegExp(// Format 1, e.g. "lunes, 29 de agosto de 2011" 
     '(' + i18nDate.es.days.join('|') + ')' + ', de (\d+) ' 
     + '(' + i18nDate.es.months.join('|') + ')' + ' de (\d+)'), 
    // ... for each common date format. 
    ], 
    // ... for each locale. 
}; 

function parseI18nDate(s) { 
    var locale, formats, i, m; 
    for (locale in i18nFormat) { 
    formats = i18nFormat[locale]; 
    for (i=0; i<formats.length; i++) { 
     if (m = s.match(formats[i])) { 
     return new Date(m[x], m[y], m[z]); 
     // TODO: mapping of field position to date component. 
     } 
    } 
    } 
    return null; 
} 

顯然有很多的細節,包括區域設置特定的格式和值來制定。這項努力足夠大,可以保證一個完整的圖書館。也許已經有一個開源項目來做這樣的事情?

+0

感謝您的建議 –

3

用於這一目的的最好的圖書館很可能會Globalize。它允許你指定區域(稱爲文化,但它實際上是一樣的),格式(內置或你自己的),實際上解析字符串來指定日期:

var dateString = "lunes, 29 de agosto de 2011"; 
// seems like long date format in Spanish 
var date = Globalize.parseDate(dateString, "D", "es"); 

你會需要附加適當的文化檔案以及對全球化的參考使其發揮作用。請介意的文化在庫中已定義的,所以不要害怕在網頁上的信息,你居然不需要 .NET。

+0

全球化庫似乎對於我。我會嘗試在我們的應用程序中使用這個庫,因爲最好使用經過驗證的庫而不是編寫自己的庫。感謝您的建議 –

相關問題