1

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

"25-AUG-11"
4

6 回答 6

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

现场演示在这里

注意:因为您的输入字符串中有“AUG”,如果您的计算机的语言环境不使用英语,您可能需要告诉库使用英语来解析“MMM”部分。

总有一天我们都会讲 ISO-8601。#咆哮:)

于 2013-06-24T03:05:19.130 回答
0

使用可以使用 Date 对象方法: ToISOString() 这根据 ISO 标准将日期转换为字符串或使用 :::toLocaleDateString()

于 2013-06-24T03:00:55.440 回答
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));
于 2013-06-24T03:01:57.523 回答
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"
于 2013-06-24T03:02:39.910 回答
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());
}

您选择“最佳”。

于 2013-06-24T03:08:42.670 回答
0

这似乎工作正常。

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

工作小提琴

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

资源

于 2013-06-24T03:18:02.900 回答