85

次の構造のISO8601日付をjavascriptに変換するためのヘルプ/ヒントが必要です。

CCYY-MM-DDThh:mm:ssTZD

日付を次のようにフォーマットしたいと思います。

January 28, 2011 - 7:30PM EST

このソリューションを可能な限りクリーンで最小限に抑えたいと思います。

4

6 に答える 6

113

Dateオブジェクトは、最初のパラメーターとして8601を処理します。

var d = new Date("2014-04-07T13:58:10.104Z");
console.log(d.toString());

于 2014-04-07T14:04:10.730 に答える
35

datejsは以下を解析できます。試してみてください。

Date.parse('1997-07-16T19:20:15')           // ISO 8601 Formats
Date.parse('1997-07-16T19:20:30+01:00')     // ISO 8601 with Timezone offset

編集:正規表現バージョン

x = "2011-01-28T19:30:00EST"

MM = ["January", "February","March","April","May","June","July","August","September","October","November", "December"]

xx = x.replace(
    /(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):\d{2}(\w{3})/,
    function($0,$1,$2,$3,$4,$5,$6){
        return MM[$2-1]+" "+$3+", "+$1+" - "+$4%12+":"+$5+(+$4>12?"PM":"AM")+" "+$6
    }
)

結果

January 28, 2011 - 7:30PM EST

Edit2:タイムゾーンをESTに変更しましたが、次のようになりました

x = "2011-01-28T19:30:00-05:00"

MM = {Jan:"January", Feb:"February", Mar:"March", Apr:"April", May:"May", Jun:"June", Jul:"July", Aug:"August", Sep:"September", Oct:"October", Nov:"November", Dec:"December"}

xx = String(new Date(x)).replace(
    /\w{3} (\w{3}) (\d{2}) (\d{4}) (\d{2}):(\d{2}):[^(]+\(([A-Z]{3})\)/,
    function($0,$1,$2,$3,$4,$5,$6){
        return MM[$1]+" "+$2+", "+$3+" - "+$4%12+":"+$5+(+$4>12?"PM":"AM")+" "+$6 
    }
)

戻る

January 28, 2011 - 7:30PM EST

基本的に

String(new Date(x))

戻る

Fri Jan 28 2011 19:30:00 GMT-0500 (EST)

上記の文字列を必要な形式に変換するだけの正規表現パーツ。

January 28, 2011 - 7:30PM EST
于 2011-01-28T15:01:22.797 に答える
20

シンプルにしたい場合は、これで十分です。

function parseIsoDatetime(dtstr) {
    var dt = dtstr.split(/[: T-]/).map(parseFloat);
    return new Date(dt[0], dt[1] - 1, dt[2], dt[3] || 0, dt[4] || 0, dt[5] || 0, 0);
}

parseFloatは必須であり、parseIntが常に機能するとは限らないことに注意してください。マップにはIE9以降が必要です。

フォーマットで動作します:

  • 2014-12-28 15:30:30
  • 2014-12-28T15:30:30
  • 2014-12-28

タイムゾーンには無効です。それらに関する他の回答を参照してください。

于 2014-10-17T23:09:58.877 に答える
3

たぶん、moment.jsを使用できます。これは、私の意見では、クライアント側の日付の解析、フォーマット、および操作に最適なJavaScriptライブラリです。次のようなものを使用できます。

var momentDate = moment('1890-09-30T23:59:59+01:16:20', 'YYYY-MM-DDTHH:mm:ss+-HH:mm:ss');
var jsDate = momentDate.toDate();

// Now, you can run any JavaScript Date method

jsDate.toLocaleString();

moment.jsのようなライブラリを使用する利点は、IE8以降のようなレガシーブラウザでもコードが完全に機能することです。

解析方法に関するドキュメントは次のとおりです: https://momentjs.com/docs/#/parsing/

于 2017-02-22T16:28:25.100 に答える
-1

MSDNによると、JavaScript Dateオブジェクトは特定の日付フォーマットメソッドを提供していません(他のプログラミング言語で見られるように)。ただし、いくつかのDate方法とフォーマットを使用して、目標を達成できます。

function dateToString (date) {
  // Use an array to format the month numbers
  var months = [
    "January",
    "February",
    "March",
    ...
  ];

  // Use an object to format the timezone identifiers
  var timeZones = {
    "360": "EST",
    ...
  };

  var month = months[date.getMonth()];
  var day = date.getDate();
  var year = date.getFullYear();

  var hours = date.getHours();
  var minutes = date.getMinutes();
  var time = (hours > 11 ? (hours - 11) : (hours + 1)) + ":" + minutes + (hours > 11 ? "PM" : "AM");
  var timezone = timeZones[date.getTimezoneOffset()];

  // Returns formatted date as string (e.g. January 28, 2011 - 7:30PM EST)
  return month + " " + day + ", " + year + " - " + time + " " + timezone;
}

var date = new Date("2011-01-28T19:30:00-05:00");

alert(dateToString(date));

さらに一歩進んで、Date.toString()メソッドをオーバーライドすることもできます。

function dateToString () { // No date argument this time
  // Use an array to format the month numbers
  var months = [
    "January",
    "February",
    "March",
    ...
  ];

  // Use an object to format the timezone identifiers
  var timeZones = {
    "360": "EST",
    ...
  };

  var month = months[*this*.getMonth()];
  var day = *this*.getDate();
  var year = *this*.getFullYear();

  var hours = *this*.getHours();
  var minutes = *this*.getMinutes();
  var time = (hours > 11 ? (hours - 11) : (hours + 1)) + ":" + minutes + (hours > 11 ? "PM" : "AM");
  var timezone = timeZones[*this*.getTimezoneOffset()];

  // Returns formatted date as string (e.g. January 28, 2011 - 7:30PM EST)
  return month + " " + day + ", " + year + " - " + time + " " + timezone;
}

var date = new Date("2011-01-28T19:30:00-05:00");
Date.prototype.toString = dateToString;

alert(date.toString());
于 2013-01-04T22:22:51.603 に答える
-2

moment.jsが最も人気があり、活発に開発されているようです。

moment("2010-01-01T05:06:07", moment.ISO_8601);
于 2021-01-03T03:00:33.313 に答える