将以下字符串转换为MM / DD / YYYY的javascript日期字符串格式的最佳方法是什么?
"25-AUG-11"
答案 0 :(得分:2)
最好的方式是在问题评论中由jmeans给出。
当给出一个表示一种格式的日期的字符串时,将其转换为另一种格式的“最佳方式”是先将解析到日期,然后 format 你想要的字符串的日期。
除非这是一次性转换,否则不要浪费时间编写代码来格式化和解析日期!这是一个解决的问题,由许多经过全面测试的库实现。如果您正在做任何涉及日期处理和计算的事情,那么自己做事可能容易出错。
一个好的轻量级日期库是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:)
答案 1 :(得分:0)
使用可以使用Date对象方法: ToISOString() 这根据ISO标准将日期转换为字符串 要么 使用::: toLocaleDateString()
答案 2 :(得分: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));
答案 3 :(得分: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"
答案 4 :(得分: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());
}
你选择“最好的”。
答案 5 :(得分:0)
这似乎工作正常。
var date = new Date("25-AUG-11");
console.log(date.getMonth() + '/' + date.getDate() + '/' + date.getFullYear());
您只需要在月份值的开头添加0
,这可以通过字符串长度比较轻松完成。