如何将以下字符串转换为正确的字符串?

时间:2013-06-24 02:26:14

标签: javascript

将以下字符串转换为MM / DD / YYYY的javascript日期字符串格式的最佳方法是什么?

"25-AUG-11"

6 个答案:

答案 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"));

Live demo here

注意:因为您的输入字符串中有“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());

Working Fiddle

您只需要在月份值的开头添加0,这可以通过字符串长度比较轻松完成。

Source