簡體   English   中英

在javascript中將各種日期格式轉換為yyyy-mm-dd

[英]convert various date formats to yyyy-mm-dd in javascript

我希望能夠將各種日期格式轉換為單一格式,即yyyy-mm-dd,例如:

20-10-1975 -> 1975-10-20 (dd-mm-yyyy -> yyyy-mm-dd) 

01-25-1961 ->1961-01-25 (mm-dd-yyyy -> yyyy-mm-dd) 

1991-10-25 -> 1991-10-25 (yyyy-mm-dd remains yyyy-mm-dd)

如果可能的話還有時間組件,例如:

20-10-1975 13:15:22 -> 1975-10-20 13:15:22

原因是我希望能夠在日期上對數組進行排序,但有時我必須處理各種我無法控制的格式。

有沒有實現這個功能?

PS我知道有時候日期可能不明確,例如6-5-2015可能是5月6日,或6月5日,但只要排序有效,我就可以了。

你可以看看Intl.DateTimeFormat 它可能會幫助你,但從未使用它,我無法幫助你。

對於簡單的情況,您可以在字符串split的幫助下手動完成。 您必須為您想要使用的每種不同格式實現解析器。 這是一個簡單的例子。 我選擇通過日期來解析和格式化獨立,但您可以選擇重新排序部分。

 function parse(dateString){ var parts = dateString.split("-"); return new Date(parts[2], parts[1], parts[0]); } function format(date){ var month = date.getMonth(); var day = date.getDay(); return [ date.getFullYear(), month > 9 ? month : "0" + month, day > 9 ? day : "0" + day ].join("-"); } var date = parse("20-10-1975"); console.log(format(date)); 

但是,我建議使用一個可以節省一些時間的庫,並以額外的依賴為代價為您提供更大的靈活性。 例如,操縱日期的最着名的庫之一是moment.js 以下是如何使用它的示例。

 var ex1 = moment("20-10-1975", "DD-MM-YYYY") .format("YYYY-MM-DD"); console.log(ex1); var ex2 = moment("01-25-1961", "MM-DD-YYYY") .format("YYYY-MM-DD"); console.log(ex2); var ex3 = moment("1991-10-25", "YYYY-MM-DD") .format("YYYY-MM-DD"); console.log(ex3); var ex4 = moment("20-10-1975 13:15:22", "YYYY-MM-DD HH:mm:ss") .format("YYYY-DD-MM HH:mm:ss"); console.log(ex4); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.min.js"></script> 

如果您想嘗試匹配多種格式(因為它似乎是您的情況),您也可以這樣做。 只需提供momentjs應該嘗試識別您的字符串的順序。 這是一個例子。

 function formatDate(dateStr, inputFormats, outputFormat){ // Format without the hours, minutes and seconds. inputFormats = inputFormats || [ "YYYY-MM-DD", "DD-MM-YYYY", "MM-DD-YYYY" ]; outputFormat = outputFormat || "YYYY-MM-DD"; // Try to match without the hours, minutes and seconds. var mDate = moment(dateStr, inputFormats, true); if(mDate.isValid()){ // If that worked, give the result without them. return mDate.format(outputFormat); } // Create format with hours, minutes and seconds. var extendedInputFormats = inputFormats.map(function(f){ return f + " HH:mm:ss"; }); // Try to match with hours, minutes and seconds. mDate = moment(dateStr, extendedInputFormats, true); if(mDate.isValid()){ // If that worked, give the result with them. return mDate.format(outputFormat + " HH:mm:ss"); } } console.log("20-10-1975 =>", formatDate("20-10-1975")); console.log("01-25-1961 =>", formatDate("01-25-1961")); console.log("1991-10-25 =>", formatDate("1991-10-25")); console.log("20-10-1975 13:15:22 =>", formatDate("20-10-1975 13:15:22")); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.min.js"></script> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM