2013-06-24 56 views
1

將以下字符串轉換爲JavaScript日期字符串格式爲MM/DD/YYYY的最佳方法是什麼?如何將下列字符串轉換爲正確的字符串?

"25-AUG-11" 
+0

SeeeeHeyaar - http://stackoverflow.com/questions/7151543/convert-dd-mm-yyyy-string-to-date – Coffee

+2

假設你不只是指更換'-'與'/' - 這只是一個簡單的字符串操作 - 我傾向於依賴我喜歡的,itty bitty js日期插件,[moment.js](http://momentjs.com/)這樣的東西。 – jmeas

+2

@jmeas爲什麼不給一行moment.js解析/格式表達式作爲答案?它當然是符合恕我直言的最佳方式*,我會贊成它作爲答案。 –

回答

2

最好的方法是由jmeans在對問題的評論中給出的。

當給代表一個格式的日期的字符串,那麼「最好的辦法」,以它隱蔽爲另一種格式是先解析到一個日期,然後格式日期到你想要的字符串。

除非這是一次性轉換,否則不要浪費時間編寫代碼來格式化和解析日期!這是一個解決的問題,由許多經過徹底測試的庫實現。如果你正在做任何涉及日期處理和計算的事情,那麼你自己做事可能會很容易出錯。

一個很好的輕量級日期庫是moment.js。

包括moment.js這樣的:

<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.0.0/moment.min.js"></script> 

然後爲您的特定例如JavaScript代碼可以是:

alert(moment("25-AUG-11", "DD-MMM-YY").format("MM/DD/YYYY")); 

Live demo here

注:因爲你有 「AUG」 在您的輸入字符串,如果您的計算機的語言環境不使用英語,您可能需要告訴圖書館使用英語解析「MMM」部分。

有一天我們都會說ISO-8601。 #rant :)

+0

我不同意「不要浪費時間編寫代碼來格式化和解析日期」。這是一個簡單的任務,如果原始使用的是四位數年份,則需要大約3行代碼(並且在給定兩位數年份的情況下只需多行幾行)。 – RobG

+0

我絕對贊同這種一次性的觀點,但總的來說,我絕不會寫一個操縱日期和字符串級別的應用程序。不管簡單的代碼如何,只是混合抽象層次而已。如果它能工作,我甚至會使用醜陋的內置ECMAScript日期。乾杯。 :) –

+0

不幸的是,內置的日期對象是非常無用的解析。如果我花了很多時間和日期來格式化(比如日曆),我可能會使用日期庫,但不是其他格式。但是,我更喜歡看到實際的日期和時間,而不是「大約10分鐘前」。 – RobG

0

使用可以使用日期對象的方法: ToISOString() 這根據ISO標準 OR 使用::: toLocaleDateString()

0

你可以使用這樣的覆羽日期字符串:

var months={ 
"JAN":1, 
"FEB":2, 
//... other months 
"DEC":12 
} 
var r=/(\d{1,2})\-(\w+)?\-(\d{1,2})/; 
var replaceFunction=function(){ 
var years=parseInt(arguments[3],10); 
var m=months[arguments[2]]; 
var days=arguments[1] 
if(m<9){ 
    m="0"+m; 
} 
if(days.length===1){ 
    days="0"+days; 
} 
if(years>50){ 
    years="19"+years; 
}else{ 
    years="20"+years; 
} 
return m+"/"+days+"/"+years; 
}; 

console.log("5-JAN-14".replace(r,replaceFunction)); 
console.log("25-FEB-98".replace(r,replaceFunction)); 
0

您可以使用此JavaScript函數來實現這一目標:

function formatDate(dateparam) { 
    var dateObj = new Date(Date.parse(dateparam)); 

    var date = dateObj.getDate(); 
    date = (date.toString().length == 1) ? "0" + date : date; 

    var month = dateObj.getMonth() + 1; 
    month = (month.toString().length == 1) ? "0" + month : month; 

    var year = dateObj.getFullYear(); 

    return month + "/" + date + "/" + year; 
} 

document.write(formatDate("25-AUG-11")); 
//returns "08/25/2011" 
0

「最好」是相對的,您沒有提供任何標準。下面是使用純字符串處理的一種方法:

function reFormatDateString(s) { 
    s = s.split('-'); 
    var months = {jan:'01', feb:'02', mar:'03', apr:'04', may:'05', jun:'06', 
       jul:'07', aug:'08', sep:'09', oct:'10', nov:'11', dec:'12'}; 
    return months[s[1].toLowerCase()] + '/' + s[0] + '/' + s[2]; 
} 

alert(reFormatDateString('25-AUG-11')); // 08/25/2011 

但是,可能您希望更具體地處理兩位數年份。

// The format "MM/DD/YYYY" isn't a "javascript" format, it's a US format. 
function reFormatDateString1(s) { 
    s = s.split('-'); 
    var months = {jan:'01', feb:'02', mar:'03', apr:'04', may:'05', jun:'06', 
       jul:'07', aug:'08', sep:'09', oct:'10', nov:'11', dec:'12'}; 
    var m = +s[2]; 
    s[2] = m < 100? (m < 50? m + 2000 : m + 1900) : m; 
    return months[s[1].toLowerCase()] + '/' + s[0] + '/' + s[2]; 
} 

這是一個使用日期對象的另一個版本:

function reFormatDateString2(s) { 
    s = s.split('-'); 
    var months = {jan:0, feb:1, mar:2, apr:3, may:4, jun:5, 
       jul:6, aug:7, sep:8, oct:9, nov:10, dec:11}; 
    function z(n){return (n<10? '0' : '') + n;} 

    // Convert 2 digit year. If < 50, assume 21st century, 
    // otherwise assume 20th. 
    // Adjust range to suit 
    if (s[2].length == 2) { 
    if (s[2] < 50) { 
     s[2] = +s[2] + 2000; 
    } else { 
     s[2] = +s[2] + 1900; 
    } 
    } 
    var d = new Date(s[2], months[s[1].toLowerCase()], s[0]); 

    return z(d.getMonth() + 1) + '/' + z(d.getMonth()+1) + '/' + z(d.getFullYear()); 
} 

您選擇 「最佳」。

0

這似乎工作正常。

var date = new Date("25-AUG-11"); 
console.log(date.getMonth() + '/' + date.getDate() + '/' + date.getFullYear()); 

Working Fiddle

你只需要一個能方便地與字符串長度的比較來進行月份中起加入0

Source

相關問題