将以下字符串转换为 MM/DD/YYYY 的 javascript 日期字符串格式的最佳方法是什么?
"25-AUG-11"
最好的方法是 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。#咆哮:)
使用可以使用 Date 对象方法: ToISOString() 这根据 ISO 标准将日期转换为字符串或使用 :::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());
}
您选择“最佳”。