回答
最好的方法是由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"));
注:因爲你有 「AUG」 在您的輸入字符串,如果您的計算機的語言環境不使用英語,您可能需要告訴圖書館使用英語解析「MMM」部分。
有一天我們都會說ISO-8601。 #rant :)
我不同意「不要浪費時間編寫代碼來格式化和解析日期」。這是一個簡單的任務,如果原始使用的是四位數年份,則需要大約3行代碼(並且在給定兩位數年份的情況下只需多行幾行)。 – RobG
我絕對贊同這種一次性的觀點,但總的來說,我絕不會寫一個操縱日期和字符串級別的應用程序。不管簡單的代碼如何,只是混合抽象層次而已。如果它能工作,我甚至會使用醜陋的內置ECMAScript日期。乾杯。 :) –
不幸的是,內置的日期對象是非常無用的解析。如果我花了很多時間和日期來格式化(比如日曆),我可能會使用日期庫,但不是其他格式。但是,我更喜歡看到實際的日期和時間,而不是「大約10分鐘前」。 – RobG
使用可以使用日期對象的方法: ToISOString() 這根據ISO標準 OR 使用::: toLocaleDateString()
你可以使用這樣的覆羽日期字符串:
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));
您可以使用此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"
「最好」是相對的,您沒有提供任何標準。下面是使用純字符串處理的一種方法:
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());
}
您選擇 「最佳」。
這似乎工作正常。
var date = new Date("25-AUG-11");
console.log(date.getMonth() + '/' + date.getDate() + '/' + date.getFullYear());
你只需要一個能方便地與字符串長度的比較來進行月份中起加入0
。
- 1. 將字符串轉換爲正確的日期字符串
- 2. 如何將字符串的字符串轉換爲字符?
- 3. 如何將字符串列表轉換爲查詢字符串?
- 4. 將字符串轉換爲字符串
- 5. 將字符串轉換爲字符串
- 6. 將字符串轉換爲字符串
- 7. 將字符串轉換爲字符,空格字符未正確轉換
- 8. 如何將字符串文字轉換爲字符串值
- 9. 如何將JTextField轉換爲字符串和字符串爲JTextField?
- 10. 將字符串列表轉換爲字符串列表
- 11. 將字符串轉換爲字列表?
- 12. 將字符串轉換爲int,int轉換爲字符串
- 13. 如何將字符串轉換爲HTML友好的字符串
- 14. 如何將字符串轉換爲Perl中的unicode字符串
- 15. 如何將圖像上的字符串轉換爲字符串?
- 16. 如何將Unicode編碼的字符串轉換爲字符串
- 17. 如何將字符串的元組轉換爲字符串*?
- 18. JAVA將字符串轉換爲字符串數組的列表
- 19. 如何將字符串轉換爲正確的URL地址?
- 20. 如何將其轉換爲正確的字符串?
- 21. 如何將包含字符轉義序列的字符串轉換爲字符?
- 22. 正確的字符串轉義爲T-SQL字符串文字
- 23. 如何將Objective-C字符串轉換爲C字符串?
- 24. 如何將[]字符串轉換爲...字符串
- 25. 如何將字符串轉換爲字符串[] // Android開發// Java
- 26. 如何將Flask Markup字符串轉換爲普通字符串
- 27. 如何將字符串[]轉換爲字符串?
- 28. 如何將這些字符串轉換爲普通字符串?
- 29. 如何將字符串塊轉換爲字符串數組
- 30. 如何將數據框轉換爲RDD [字符串,字符串]?
SeeeeHeyaar - http://stackoverflow.com/questions/7151543/convert-dd-mm-yyyy-string-to-date – Coffee
假設你不只是指更換'-'與'/' - 這只是一個簡單的字符串操作 - 我傾向於依賴我喜歡的,itty bitty js日期插件,[moment.js](http://momentjs.com/)這樣的東西。 – jmeas
@jmeas爲什麼不給一行moment.js解析/格式表達式作爲答案?它當然是符合恕我直言的最佳方式*,我會贊成它作爲答案。 –