表示 - javascript 西暦 2桁




JavaScriptで日付の書式設定に関するドキュメントはどこにありますか? (20)

私は、JavaScriptのnew Date()関数がいくつかの形式で日付を受け入れることに非常に賢いことに気づいた。

Xmas95 = new Date("25 Dec, 1995 23:15:00")
Xmas95 = new Date("2009 06 12,12:52:39")
Xmas95 = new Date("20 09 2006,12:52:39")

私はnew Date()関数を呼び出している間、どこでもすべての有効な文字列形式を示すドキュメンテーションを見つけることができませんでした。

これは文字列を日付に変換するためのものです。 JavaScriptを日付オブジェクトを文字列にフォーマットする組み込みのAPIがないという印象を受けていた今まで、日付オブジェクトを文字列に変換するという反対側を見ると、

編集者の注記:以下のアプローチは、特定のブラウザで動作するが一般的には動作しない Askerの試みです。 このページの回答を見て実際の解決策を見てください。

今日は、dateオブジェクトのtoString()メソッドを使って演奏しましたが、意外にも、日付を文字列にフォーマットする目的を果たしています。

var d1 = new Date();
d1.toString('yyyy-MM-dd');       //Returns "2009-06-29" in Internet Explorer, but not Firefox or Chrome
d1.toString('dddd, MMMM ,yyyy')  //Returns "Monday, June 29,2009" in Internet Explorer, but not Firefox or Chrome

またここでは、日付オブジェクトを文字列にフォーマットすることができるすべての方法についてのドキュメントを見つけることができませんでした。

Date()オブジェクトでサポートされている書式指定子の一覧を記載したドキュメントはどこですか?


Date()オブジェクトでサポートされている書式指定子の一覧を記載したドキュメントはどこですか?

私は今日これを見つけて、誰もこの簡単な質問に答える時間をとらなかったことに非常に驚いた。 実際、日付の操作に役立つライブラリがあります。 いくつかは他のものより優れています。 しかし、それは質問された質問ではありませんでした。

AFAIK、純粋なJavaScriptはあなたがそれらを使いたいと言ったように書式指示子をサポートしていません。 しかし、 .toLocaleTimeString() .toLocaleDateString()などの日付や時刻の書式設定のためのメソッドをサポートしています。

私が最も頻繁に使用するDateオブジェクトのリファレンスは、 w3schools.com/jsref/jsref_obj_date.asp (しかし、迅速なGoogle検索では、あなたのニーズに一層合っています)。

また、 Date Object Propertiesセクションにはprototypeへのリンクがあり、カスタムメソッドでDateオブジェクトを拡張する方法を示しています。 JavaScriptコミュニティではこれがベストプラクティスかどうかについて数年にわたって議論されてきましたが、その存在を指摘しているだけではありません。


短答

javascriptには「普遍的な」ドキュメンテーションはありません。 javascriptを持っているすべてのブラウザは実際に実装されています。 しかし、最新のブラウザーのほとんどが従う傾向がある標準があります。これはEMCAScript標準です。 ECMAScriptの標準文字列は、ISO 8601定義の修正された実装を最小限にとどめるでしょう。

これに加えて、RFC 2822で作成されたタイムスタンプの定義であるブラウザーにも従う傾向があるIETFからの第2の標準があります。実際のドキュメントは、下の参照リストにあります。

これから基本的な機能を期待することができますが、それは本質的に「何か」ではありません。 私はこれを手続き的に少し深く説明するつもりですが、実際には3人の人が質問に答えました(Scott、goofballLogic、peller)。私にはほとんどの人が実際に何が起こっているのか分からないDateオブジェクトを作成します。

長い答え

Date()オブジェクトでサポートされている書式指定子の一覧を記載したドキュメントはどこですか?


その質問に答えるために、あるいは典型的にはこの質問に対する答えを探すために、あなたはJavaScriptが新しい言語ではないことを知る必要があります。 実際にはECMAScriptの実装であり、ECMAScript標準に準拠しています(ただし、JavaScriptは実際にはこれらの標準よりも前になっていますが、EMCAScript標準はLiveScript / JavaScriptの初期実装から構築されています)。 現在のECMAScript標準は5.1(2011)です。 2009年6月の質問では、標準は3(4は放棄)でしたが、5は2009年末にポストの直後にリリースされました。 a)それは与えられた標準の実装であり、b)標準の実装はすべてPuritanではないし、c)機能はaと同期してリリースされないため、実際に実装されているものは反映されない可能性があるd)新しい標準は、実装が進行中の一定の作業であること

基本的に、javascriptを扱う場合、実装(javascript自体)の派生物(ブラウザ固有のjavascript)を扱っています。 たとえば、GoogleのV8ではECMAScript 5.0が実装されていますが、Internet ExplorerのJScriptはECMAScript標準に準拠していませんが、Internet Explorer 9はECMAScript 5.0に準拠しています。

1つの引数が新しいDate()に渡されると、この関数プロトタイプがキャストされます。

new Date(value)

2つ以上の引数が新しいDate()に渡されると、この関数プロトタイプがキャストされます。

new Date (year, month [, date [, hours [, minutes [, seconds [, ms ] ] ] ] ] )


これらの関数はどちらもよく似ているはずですが、これはすぐにあなたの質問に答えるものではなく、許容できる「日付形式」として数量化されているものはそれ以上の説明が必要です。 文字列を新しいDate()に渡すと、プロトタイプが呼び出されます(私は、 プロトタイプという言葉をゆるやかに使用しています;バージョンは個別の関数でも、単一の関数では条件文の一部でもかまいません)。あなたの文字列を "value"パラメータの引数として使う新しいDate(value) 。 この関数は、最初に数値か文字列かどうかをチェックします。 この関数のドキュメントは、次の場所にあります。

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2

これから、新しいDate(value)に使用できる文字列の書式を取得するには、Date.parse(string)メソッドを調べなければならないことがわかります。 このメソッドのドキュメントは、次の場所にあります。

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2

さらに、ここで指定されているように、日付が変更されたISO 8601拡張フォーマットになると予想されることをさらに推測できます。

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15

しかし、私たちはjavascriptのDateオブジェクトが他のフォーマットを受け入れることを経験から認識することができます(ECMAScriptは実装固有のフォーマットを可能にするため、この質問の存在によって強制されます)。 しかし、それでも利用可能なフォーマットで利用可能なドキュメンテーションの問題や実際に許されるフォーマットには答えられません。 GoogleのJavaScript実装V8を見てみましょう。 私はこれが「最高の」javascriptエンジンであることを示唆していません(どのように「最高」または「良い」を定義することができますか)。そして、V8で許されるフォーマットは今日利用可能なすべてのフォーマットを表すとは仮定できませんが、彼らが現代の期待に従うと仮定すること。

GoogleのV8、date.js、DateConstructor

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141

DateConstructor関数を見ると、DateParse関数を見つける必要があることがわかります。 ただし、「年」は実際の年ではなく、「年」パラメータへの参照に過ぎないことに注意してください。

GoogleのV8、date.js、DateParse

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270

これは%DateParseStringを呼び出します。これは、実際にはC ++関数の実行時関数参照です。 これは、次のコードを参照しています:

GoogleのV8、runtime.cc、%DateParseString

https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559

この関数で扱う関数呼び出しは、DateParser :: Parse()です。 これらの関数呼び出しを取り囲むロジックを無視します。これらは、エンコーディングタイプ(ASCIIおよびUC16)に準拠するかどうかのチェックだけです。 DateParser :: Parseはここで定義されています:

GoogleのV8、dateparser-inl.h、DateParser :: Parse

https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36

これは実際にどの形式を受け入れるかを実際に定義する関数です。 本質的には、EMCAScript 5.0 ISO 8601標準をチェックし、規格に準拠していない場合は、レガシー形式に基づいて日付を作成しようとします。 コメントに基づいたいくつかの重要なポイント:

  1. パーサに知られていない最初の数字の前の単語は無視されます。
  2. カッコで囲まれたテキストは無視されます。
  3. 「:」が続く符号なし数字は「時間成分」として解釈される。
  4. 「。」が続く符号なし数値は「時間成分」として解釈され、ミリ秒が続く必要があります。
  5. 時間または分(例えば、+5:15または+0515)が続く符号付き数字は、タイムゾーンとして解釈されます。
  6. 時と分を宣言するときは、 "hh:mm"または "hhmm"のいずれかを使用できます。
  7. タイムゾーンを示す単語は、タイムゾーンとして解釈されます。
  8. それ以外の数字はすべて「日付コンポーネント」と解釈されます。
  9. 1か月の最初の3桁で始まるすべての単語が月として解釈されます。
  10. 「hh:mm」または「hhmm」のいずれかの形式で、分と時間を一緒に定義することができます。
  11. 数字が処理された後は、「+」、「 - 」、「不一致」などの記号は使用できません。
  12. 複数のフォーマットに一致するアイテム(例:1970-01-01)は、標準準拠のEMCAScript 5.0 ISO 8601文字列として処理されます。

だから、これは文字列をDateオブジェクトに渡すときに何を期待するのかという基本的な考え方を与えるのに十分なはずです。 MozillaがMozilla Developer Network上で指摘している次の仕様(IETF RFC 2822タイムスタンプに準拠)を見て、これをさらに拡張することができます:

http://tools.ietf.org/html/rfc2822#page-14

Microsoft Developer Networkには、Dateオブジェクトの追加標準であるECMA-402、ECMAScript国際化API仕様が追加されています。これはECMAScript 5.1標準(および将来のもの)を補完します。 それはここに見つけることができます:

http://www.ecma-international.org/ecma-402/1.0/

いずれにしても、これはjavascriptのすべての実装を包括的に表現する "ドキュメンテーション"が存在しないことを強調するのに役立つはずですが、Dateオブジェクトに対してどんな文字列が受け入れられるかを合理的に理解するのに十分な文書があります。 あなたはそれについて考えているときにかなり質問を積んだ、はい? :P

参考文献

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.3.2

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.4.2

http://www.ecma-international.org/ecma-262/5.1/#sec-15.9.1.15

http://tools.ietf.org/html/rfc2822#page-14

http://www.ecma-international.org/ecma-402/1.0/

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#141

https://code.google.com/p/v8/source/browse/trunk/src/date.js?r=18400#270

https://code.google.com/p/v8/source/browse/trunk/src/runtime.cc?r=18400#9559

https://code.google.com/p/v8/source/browse/trunk/src/dateparser-inl.h?r=18400#36

リソース

developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

http://msdn.microsoft.com/en-us/library/ff743760(v=vs.94).aspx


カスタム書式設定機能:

固定形式の場合、単純な関数でジョブを作成します。 次の例では、国際形式YYYY-MM-DDを生成します。

function dateToYMD(date) {
    var d = date.getDate();
    var m = date.getMonth() + 1;
    var y = date.getFullYear();
    return '' + y + '-' + (m<=9 ? '0' + m : m) + '-' + (d <= 9 ? '0' + d : d);
}

注:しかし、通常、Javascriptの標準ライブラリを拡張することは好ましくありません(例えば、この関数をDateのプロトタイプに追加することによって)。

より高度な機能は、フォーマットパラメータに基づいて設定可能な出力を生成することができます。 この同じページにはいくつかの良い例があります。

書式設定関数を書くのが長すぎる場合は、その周りにたくさんのライブラリがあります。 他のいくつかの答えはすでにそれらを列挙しています。 しかし依存性が増すにつれて、それに反する部分もあります。

標準のECMAScript書式設定関数:

ECMAscriptのより新しいバージョン以降、 Dateクラスにはいくつかの特定の書式設定機能があります。

toDateString :実装に依存し、日付のみを表示します。

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.todatestring

new Date().toDateString(); // e.g. "Fri Nov 11 2016"

toISOString :ISO 8601の日付と時刻を表示します。

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.toisostring

new Date().toISOString(); // e.g. "2016-11-21T08:00:00.000Z"

toJSON :JSONのためのStringifier。

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tojson

new Date().toJSON(); // e.g. "2016-11-21T08:00:00.000Z"

toLocaleDateString :実装に依存し、ロケール形式の日付。

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocaledatestring

new Date().toLocaleDateString(); // e.g. "21/11/2016"

toLocaleString :実装に依存し、ロケール形式の日付と時刻。

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocalestring

new Date().toLocaleString(); // e.g. "21/11/2016, 08:00:00 AM"

toLocaleTimeString :実装に依存し、ロケール形式の時刻。

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tolocaletimestring

new Date().toLocaleTimeString(); // e.g. "08:00:00 AM"

toString :Dateの汎用のtoStringです。

http://www.ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.tostring

new Date().toString(); // e.g. "Fri Nov 11 2016 08:00:00 GMT+0100 (W. Europe Standard Time)"

注:これらの書式設定関数からカスタム出力を生成することは可能です。

new Date().toISOString().slice(0,10); // By @Image72, return YYYY-MM-DD


meizz指摘したように、新しいformatメソッドでDateオブジェクトを拡張することができます。以下に、作成者が指定したコードを示します。 そして、ここにはjsfiddleます。

Date.prototype.format = function(format) //author: meizz
{
  var o = {
    "M+" : this.getMonth()+1, //month
    "d+" : this.getDate(),    //day
    "h+" : this.getHours(),   //hour
    "m+" : this.getMinutes(), //minute
    "s+" : this.getSeconds(), //second
    "q+" : Math.floor((this.getMonth()+3)/3),  //quarter
    "S" : this.getMilliseconds() //millisecond
  }

  if(/(y+)/.test(format)) format=format.replace(RegExp.$1,
    (this.getFullYear()+"").substr(4 - RegExp.$1.length));
  for(var k in o)if(new RegExp("("+ k +")").test(format))
    format = format.replace(RegExp.$1,
      RegExp.$1.length==1 ? o[k] :
        ("00"+ o[k]).substr((""+ o[k]).length));
  return format;
}

alert(new Date().format("yyyy-MM-dd"));
alert(new Date("january 12 2008 11:12:30").format("yyyy-MM-dd h:mm:ss"));

JsSimpleDateFormatは、日付オブジェクトをフォーマットし、フォーマットされた文字列を解析してDateオブジェクトに戻すことができるライブラリです。これは、Java形式(SimpleDateFormatクラス)を使用します。月と日の名前はローカライズすることができます。

例:

var sdf = new JsSimpleDateFormat("EEEE, MMMM dd, yyyy");
var formattedString = sdf.format(new Date());
var dateObject = sdf.parse("Monday, June 29, 2009");

あなたが挙げている機能は、標準のJavascriptではなく、ブラウザ間で移植可能ではないため、優れた方法ではありません。 ECMAScript 3仕様では、解析と出力の機能はJavascriptの実装に任されています。 ECMAScript 5は、ISO8601サポートのサブセットを追加します。 あなたが言及しているtoString()関数は、あるブラウザ(Mozilla?)の技術革新だと思います。

いくつかのライブラリはこれをパラメータ化するためのルーチンを提供しています。 dojo.date.localeのメソッドをチェックアウトすることもできます。


ここで私はたくさん使う関数です。 結果はyyyy-mm-dd hh:mm:ss.nnnです。

function date_and_time() {
    var date = new Date();
    //zero-pad a single zero if needed
    var zp = function (val){
        return (val <= 9 ? '0' + val : '' + val);
    }

    //zero-pad up to two zeroes if needed
    var zp2 = function(val){
        return val <= 99? (val <=9? '00' + val : '0' + val) : ('' + val ) ;
    }

    var d = date.getDate();
    var m = date.getMonth() + 1;
    var y = date.getFullYear();
    var h = date.getHours();
    var min = date.getMinutes();
    var s = date.getSeconds();
    var ms = date.getMilliseconds();
    return '' + y + '-' + zp(m) + '-' + zp(d) + ' ' + zp(h) + ':' + zp(min) + ':' + zp(s) + '.' + zp2(ms);
}

ちょうどgongzhitaaoのしっかりした答えを続行する - これはAM / PMを処理します

 Date.prototype.format = function (format) //author: meizz
{
    var hours = this.getHours();
    var ttime = "AM";
    if(format.indexOf("t") > -1 && hours > 12)
    {
        hours = hours - 12;
        ttime = "PM";
     }

var o = {
    "M+": this.getMonth() + 1, //month
    "d+": this.getDate(),    //day
    "h+": hours,   //hour
    "m+": this.getMinutes(), //minute
    "s+": this.getSeconds(), //second
    "q+": Math.floor((this.getMonth() + 3) / 3),  //quarter
    "S": this.getMilliseconds(), //millisecond,
    "t+": ttime
}

if (/(y+)/.test(format)) format = format.replace(RegExp.$1,
  (this.getFullYear() + "").substr(4 - RegExp.$1.length));
for (var k in o) if (new RegExp("(" + k + ")").test(format))
    format = format.replace(RegExp.$1,
      RegExp.$1.length == 1 ? o[k] :
        ("00" + o[k]).substr(("" + o[k]).length));
return format;
}

どのようなライブラリよりも小さく、さまざまなフォーマットをサポートするために簡単に拡張できるdateオブジェクトのこの変更が役に立ちます:

注意:

  • 古いブラウザでは定義されていないObject.keys()を使用しているため、特定のリンクからpolyfillを実装する必要があります。

コード

Date.prototype.format = function(format) {
    // set default format if function argument not provided
    format = format || 'YYYY-MM-DD hh:mm';

    var zeropad = function(number, length) {
            number = number.toString();
            length = length || 2;
            while(number.length < length)
                number = '0' + number;
            return number;
        },
        // here you can define your formats
        formats = {
            YYYY: this.getFullYear(),
            MM: zeropad(this.getMonth() + 1),
            DD: zeropad(this.getDate()),
            hh: zeropad(this.getHours()),
            mm: zeropad(this.getMinutes())
        },
        pattern = '(' + Object.keys(formats).join(')|(') + ')';

    return format.replace(new RegExp(pattern, 'g'), function(match) {
        return formats[match];
    });
};

つかいます

var now = new Date;
console.log(now.format());
// outputs: 2015-02-09 11:47
var yesterday = new Date('2015-02-08');
console.log(yesterday.format('hh:mm YYYY/MM/DD'));
// outputs: 00:00 2015/02/08

フレームワークフリー、限られているが軽い

var d = (new Date()+'').split(' ');
// ["Tue", "Sep", "03", "2013", "21:54:52", "GMT-0500", "(Central", "Daylight", "Time)"]

[d[3], d[1], d[2], d[4]].join(' ');
// "2013 Sep 03 21:58:03"

プロジェクトですでにjQuery UIを使用している場合は、日付オブジェクトの書式設定に組み込みのdatepickerメソッドを使用できます。

$.datepicker.formatDate('yy-mm-dd', new Date(2007, 1 - 1, 26));

ただし、日付ピッカーは日付のみをフォーマットし、時刻はフォーマットできません。

jQuery UI datepickerのformatDateの例を見てみましょう。


私が書いたちょうど別のオプション:

DP_DateExtensionsライブラリ

それが助けになるかどうかはわかりませんが、私はそれがいくつかのプロジェクトで有用であることを発見しました。

日付/時刻の書式設定、日付計算(日付部分の加算/減算)、日付比較、日付解析などをサポートしています。オープンソースです。

すでにフレームワークを使用している場合(それはすべて可能です)、プロジェクトに日付の操作をすばやく追加するだけでよい場合は、それを考慮する必要はありません。


私は、 JavaScriptDate with Workingを 使って時間と日付をフォーマットする10の方法が大好きです。

基本的には、3つの方法があり、自分でストリングを結合する必要があります。

getDate() // Returns the date
getMonth() // Returns the month
getFullYear() // Returns the year

例:

var d = new Date();
var curr_date = d.getDate();
var curr_month = d.getMonth() + 1; //Months are zero based
var curr_year = d.getFullYear();
console.log(curr_date + "-" + curr_month + "-" + curr_year);


私はこの非常にシンプルなフォーマッタを作った、それはカット/ n /貼り付ける(neaterバージョンで更新):

function DateFmt(fstr) {
  this.formatString = fstr

  var mthNames = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
  var dayNames = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
  var zeroPad = function(number) {
     return ("0"+number).substr(-2,2);
  }

  var dateMarkers = {
    d:['getDate',function(v) { return zeroPad(v)}],
    m:['getMonth',function(v) { return zeroPad(v+1)}],
    n:['getMonth',function(v) { return mthNames[v]; }],
    w:['getDay',function(v) { return dayNames[v]; }],
    y:['getFullYear'],
    H:['getHours',function(v) { return zeroPad(v)}],
    M:['getMinutes',function(v) { return zeroPad(v)}],
    S:['getSeconds',function(v) { return zeroPad(v)}],
    i:['toISOString']
  };

  this.format = function(date) {
    var dateTxt = this.formatString.replace(/%(.)/g, function(m, p) {
      var rv = date[(dateMarkers[p])[0]]()

      if ( dateMarkers[p][1] != null ) rv = dateMarkers[p][1](rv)

      return rv

    });

    return dateTxt
  }

}

fmt = new DateFmt("%w %d:%n:%y - %H:%M:%S  %i")
v = fmt.format(new Date())

http://snipplr.com/view/66968.82825/


momentjsようなライブラリが提供する機能がすべて必要ない場合は、私のstrftimeポートを使用することができます。これは軽量です(1.35 KBと57.9 KBはMoment.js 2.15.0に比べて縮小されています)strftime()。ほとんどの機能を提供します。

/* Port of strftime(). Compatibility notes:
 *
 * %c - formatted string is slightly different
 * %D - not implemented (use "%m/%d/%y" or "%d/%m/%y")
 * %e - space is not added
 * %E - not implemented
 * %h - not implemented (use "%b")
 * %k - space is not added
 * %n - not implemented (use "\n")
 * %O - not implemented
 * %r - not implemented (use "%I:%M:%S %p")
 * %R - not implemented (use "%H:%M")
 * %t - not implemented (use "\t")
 * %T - not implemented (use "%H:%M:%S")
 * %U - not implemented
 * %W - not implemented
 * %+ - not implemented
 * %% - not implemented (use "%")
 *
 * strftime() reference:
 * http://man7.org/linux/man-pages/man3/strftime.3.html
 *
 * Day of year (%j) code based on Joe Orost's answer:
 * http://.com/questions/8619879/javascript-calculate-the-day-of-the-year-1-366
 *
 * Week number (%V) code based on Taco van den Broek's prototype:
 * http://techblog.procurios.nl/k/news/view/33796/14863/calculate-iso-8601-week-and-year-in-javascript.html
 */
function strftime(sFormat, date) {
  if (!(date instanceof Date)) date = new Date();
  var nDay = date.getDay(),
    nDate = date.getDate(),
    nMonth = date.getMonth(),
    nYear = date.getFullYear(),
    nHour = date.getHours(),
    aDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
    aMonths = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
    aDayCount = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],
    isLeapYear = function() {
      if (nYear&3!==0) return false;
      return nYear%100!==0 || year%400===0;
    },
    getThursday = function() {
      var target = new Date(date);
      target.setDate(nDate - ((nDay+6)%7) + 3);
      return target;
    },
    zeroPad = function(nNum, nPad) {
      return ('' + (Math.pow(10, nPad) + nNum)).slice(1);
    };
  return sFormat.replace(/%[a-z]/gi, function(sMatch) {
    return {
      '%a': aDays[nDay].slice(0,3),
      '%A': aDays[nDay],
      '%b': aMonths[nMonth].slice(0,3),
      '%B': aMonths[nMonth],
      '%c': date.toUTCString(),
      '%C': Math.floor(nYear/100),
      '%d': zeroPad(nDate, 2),
      '%e': nDate,
      '%F': date.toISOString().slice(0,10),
      '%G': getThursday().getFullYear(),
      '%g': ('' + getThursday().getFullYear()).slice(2),
      '%H': zeroPad(nHour, 2),
      '%I': zeroPad((nHour+11)%12 + 1, 2),
      '%j': zeroPad(aDayCount[nMonth] + nDate + ((nMonth>1 && isLeapYear()) ? 1 : 0), 3),
      '%k': '' + nHour,
      '%l': (nHour+11)%12 + 1,
      '%m': zeroPad(nMonth + 1, 2),
      '%M': zeroPad(date.getMinutes(), 2),
      '%p': (nHour<12) ? 'AM' : 'PM',
      '%P': (nHour<12) ? 'am' : 'pm',
      '%s': Math.round(date.getTime()/1000),
      '%S': zeroPad(date.getSeconds(), 2),
      '%u': nDay || 7,
      '%V': (function() {
              var target = getThursday(),
                n1stThu = target.valueOf();
              target.setMonth(0, 1);
              var nJan1 = target.getDay();
              if (nJan1!==4) target.setMonth(0, 1 + ((4-nJan1)+7)%7);
              return zeroPad(1 + Math.ceil((n1stThu-target)/604800000), 2);
            })(),
      '%w': '' + nDay,
      '%x': date.toLocaleDateString(),
      '%X': date.toLocaleTimeString(),
      '%y': ('' + nYear).slice(2),
      '%Y': nYear,
      '%z': date.toTimeString().replace(/.+GMT([+-]\d+).+/, '$1'),
      '%Z': date.toTimeString().replace(/.+\((.+?)\)$/, '$1')
    }[sMatch] || sMatch;
  });
}

サンプル使用法:

strftime('%F'); // Returns "2016-09-15"
strftime('%A, %B %e, %Y'); // Returns "Thursday, September 15, 2016"

// You can optionally pass it a Date object...

strftime('%x %X', new Date('1/1/2016')); // Returns "1/1/2016 12:00:00 AM"

最新のコードはhttps://github.com/thdoan/strftime入手できます。https://github.com/thdoan/strftime


JavaScriptで日付を書式設定し、特に解析すると頭痛になることがあります。すべてのブラウザが同じように日付を処理するわけではありません。基本メソッドを知ることは有益ですが、ヘルパーライブラリを使用する方が現実的です。

XDate JavaScriptライブラリによってアダム・ショーは 2011年半ば以来の周りされて、アクティブなまだ開発中ですました。それは素晴らしいドキュメンテーション、優れたAPI、フォーマットを持ち、後方互換性を維持しようとし、ローカライズされた文字列をサポートします。

ロケール文字列の変更へのリンク:https://gist.github.com/1221376 : https://gist.github.com/1221376


「2012-12-29」を返すように日付をフォーマットする正しい方法は、JavaScript Date Formatのスクリプトを使用することです。

var d1 = new Date();
return d1.format("dd-m-yy");

このコードは機能しません:

var d1 = new Date();
d1.toString('yyyy-MM-dd');      

ライブラリsugar.jsは、JavaScriptで日付を扱うための優れた機能があります。そしてそれは非常によくdocumenteddocumented

Sugarは、 "1時間前"のような相対的なフォーマットを含め、15の主要言語のほぼすべてのフォーマットの日付を理解できるDate.createメソッドから始めて、Dateクラスに多くのことを与えてくれます。日付は、一般的に使用されている日付形式へのショートカットとともに、わかりやすい構文を使用して任意の形式または言語で出力することもできます。また、任意の形式を理解し、組み込みの精度を適用するisのようなメソッドでは、複雑な日付比較も可能です。

いくつかの例:

Date.create('July 4, 1776')  -> July 4, 1776
Date.create(-446806800000)   -> November 5, 1955
Date.create(1776, 6, 4)      -> July 4, 1776
Date.create('1776年07月04日', 'ja') -> July 4, 1776
Date.utc.create('July 4, 1776', 'en')  -> July 4, 1776

Date.create().format('{Weekday} {d} {Month}, {yyyy}')    -> Monday July 4, 2003
Date.create().format('{hh}:{mm}')                        -> 15:57
Date.create().format('{12hr}:{mm}{tt}')                  -> 3:57pm
Date.create().format(Date.ISO8601_DATETIME)              -> 2011-07-05 12:24:55.528Z

Date.create().is('the 7th of June') -> false
Date.create().addMonths(2); ->"Sunday, June 15, 2014 13:39"

個人的には、私はPHPとjQuery / javascriptの両方を同じ尺度で使用しているため、php.jsの日付関数を使用しています。http http://phpjs.org/functions/date/ //phpjs.org/functions/date/http://phpjs.org/functions/date/

私が既に知っているものと同じフォーマット文字列を使用するライブラリを使用する方が簡単で、日付関数のフォーマット文字列の可能性をすべて含むマニュアルは、もちろんphp.net

好みの方法でHTMLにdate.jsファイルをインクルードし、次のように呼び出すだけです。

var d1=new Date();
var datestring = date('Y-m-d', d1.valueOf()/1000);

必要ならば、同じことを行うために、valueOf()の代わりにd1.getTime()を使うことができます。

JavaScriptのタイムスタンプの1000分の1は、JavaScriptのタイムスタンプがミリ秒であるが、PHPのタイムスタンプが秒単位であるためです。





time-format