1

次の文字列を MM/DD/YYYY の JavaScript 日付文字列形式に変換する最良の方法は何ですか?

"25-AUG-11"
4

6 に答える 6

2

最良の方法は、質問へのコメントで jmeans によって与えられたものです。

ある形式の日付を表す文字列が与えられた場合、それを別の形式に変換する「最良の方法」は、最初にそれを日付に解析してから、日付を必要な文字列にフォーマットすることです。

これが 1 回限りの変換でない限り、日付をフォーマットして解析するコードを書くのに時間を無駄にしないでください! これは、十分にテストされた多くのライブラリによって実装されている解決済みの問題です。日付の処理や計算を行う場合、自分で行うとエラーが発生しやすくなります。

優れた軽量の日付ライブラリの 1 つに 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

これはうまく機能しているようです。

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

働くフィドル

0文字列の長さの比較で簡単に実行できる月の開始時に値を追加するだけです。

ソース

于 2013-06-24T03:18:02.900 に答える
0

「最高」は相対的なものであり、基準を提供していません。単純な文字列操作を使用する 1 つの方法を次に示します。

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

ただし、2 桁の年をより具体的に扱いたい場合があります。

// 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 に答える