JS日付オブジェクトからYYYYMMDD形式の文字列を取得しますか?


398

私はJSを使っdate objectてaをYYYYMMDDフォーマットの文字列に変換しようとしています。連結するよりも簡単な方法はありますDate.getYear()Date.getMonth()Date.getDay()


4
これら3つを連結するのがよい方法です
ファンコルテス

5
同じ日付に解析される文字列が必要な場合は、月をインクリメントすることを忘れないでください。仕様に合わせるには、月と日付の1桁に「0」を
埋め込む

回答:


621

私がよく使用する変更されたコード:

Date.prototype.yyyymmdd = function() {
  var mm = this.getMonth() + 1; // getMonth() is zero-based
  var dd = this.getDate();

  return [this.getFullYear(),
          (mm>9 ? '' : '0') + mm,
          (dd>9 ? '' : '0') + dd
         ].join('');
};

var date = new Date();
date.yyyymmdd();

16
あなたは交換する必要がある[1].length===2、文字列のインデクサーが完全にサポートされていないため、。理由については、この回答を参照してください。
アイディアカピ2014年

6
var mm =(this.getMonth()+ 101).toStrung()。substring(0、2);
9dan

7
@Aidiakapiの修正の実用的な例が必要な人のために、ここでフィドルを作成します:jsfiddle.net/pcr8xbt5/1
killercowuk

1
ドット区切りを使用する場合:[this.getFullYear(), mm<10 ? '0'+ mm: mm, dd<10 ? '0'+ dd : dd].join('.')
KamilKiełczewskiSep

3
@ 9danはそうすべきではないvar mm = (this.getMonth() + 101).toString().substring(1, 3)
Pnar Sbi Wer

317

プロトタイプに追加したくありませんでした。別の方法は次のとおりです。

var rightNow = new Date();
var res = rightNow.toISOString().slice(0,10).replace(/-/g,"");

<!-- Next line is for code snippet output only -->
document.body.innerHTML += res;


51
あなたが必要としない場合はrightNow、変数の周りを、あなたがラップすることができnew Date、その一行中のすべて取り戻す:(new Date()).toISOString().slice(0,10).replace(/-/g,"")
BigBlueHat

5
私は欲しかったYYYYMMDDHHmmSSsssので、これを行いました: var ds = (new Date()).toISOString().replace(/[^0-9]/g, "");。かなり単純ですが、カプセル化する必要があります。
ジェス

65
Date.toISOString()はUTC形式の日付を作成し、タイムゾーンに応じて日付の境界をジャンプできるため、これは一般的に機能しません。例:GMT + 1:(new Date(2013,13、25))。toISOString()== '2013-12-24T23:00:00.000Z'
weberste

26
10000年の誰かがあなたの「懐かしい」コードを使用すると、これは失敗します。
Trevi Awater、2015

9
タイムゾーンに対処するための提案された改善。 rightNow.setMinutes(rightNow.getMinutes() - rightNow.getTimezoneOffset()); rightNow.toISOString().slice(0,10)
Andreas、

182

次のtoISOString関数を使用できます。

var today = new Date();
today.toISOString().substring(0, 10);

「yyyy-mm-dd」形式になります。


24
場合によっては、タイムゾーンの夏時間などにより、これには正しい日が含まれません...
Miguel

1
@Miguelが私の創造性を損なうのかもしれませんが、それが起こるようなケースは考えられません。例を挙げていただけませんか?
cloudworks 2015

35
タイムゾーンが+1で、日付が[2015-09-01 00:00:00 GMT + 1]の場合、toISOString()メソッドは文字列 '2015-08-31T23:00:00.000Zを返します'日付が文字列化される前にUTC / 0オフセットに変換されるため。
Luke Baulch、2015

少し短い... var today =(new Date())。toISOString()。substring(0、10);
teawithfruit 2016

異なるGMTで失敗する
トビア

133

Moment.jsはあなたの友達になることができます

var date = new Date();
var formattedDate = moment(date).format('YYYYMMDD');

18
まあ、それは私のapp.jsに40kb(縮小、非gZip)を追加しましたが、私はそれをしました、ありがとう:)
Bart

これまでのベストアンサー!
TrulyXax 2016

9
私は必然的にもう瞬間が必要になるまで待つことすらしません。プロジェクトの開始時にそれを追加するだけです:)
martinedwards

1
あなたはそれをより簡単にすることができます:var formattedDate = moment().format('YYYYMMDD');
ns16

37

純粋なJSソリューションが必要ない場合は、jQuery UIを使用して次のような作業を行うことができます。

$.datepicker.formatDate('yymmdd', new Date());

通常、あまり多くのライブラリーをインポートしたくありません。しかし、jQuery UIは非常に便利なので、おそらくプロジェクトの他の場所で使用します。

その他の例については、http://api.jqueryui.com/datepicker/にアクセスしてください


37

これは、YYYY-MM-DD今日の日付の文字列を作成するために使用できる1行のコードです。

var d = new Date().toISOString().slice(0,10);

^これ!FTW!+1 ..少しテストする必要があります。
Gogol

21
あなたの日付はGMT 2 2016年1月1日夜12時〇 〇分00秒だった場合、厳しい警告、それが返されます2015年12月31日のためにtoISOString()(2時間前)GMT +0 00:00:2015-12-31T22を与えるだろう。
ジェローム・ギラード

29
new Date('Jun 5 2016').
  toLocaleString('en-us', {year: 'numeric', month: '2-digit', day: '2-digit'}).
  replace(/(\d+)\/(\d+)\/(\d+)/, '$3-$1-$2');

// => '2016-06-05'

5
最高の魂。
زياد

何らかの理由で、変換を1日戻さないように(00:00であっても)時間を追加する必要がありました。ここで式を実行すると、米国東海岸です。私がそれをしたら、それは確実に働き始めました。これについて私が気に入っているのは、複数の形式で入力日付を取得できるため、もう心配する必要はありません。 new Date('Sun Mar 31 2019 00:00:00.000').toLocaleString('en-us', {year: 'numeric', month: '2-digit', day: '2-digit'}).replace(/(\d+)\/(\d+)\/(\d+)/, '$3-$1-$2');
ネネア

24

ooの答えに加えて、論理演算を戻りから分離し、代わりに3項として変数に入れることをお勧めします。

また、concat()変数を安全に連結するために使用します

Date.prototype.yyyymmdd = function() {
  var yyyy = this.getFullYear();
  var mm = this.getMonth() < 9 ? "0" + (this.getMonth() + 1) : (this.getMonth() + 1); // getMonth() is zero-based
  var dd = this.getDate() < 10 ? "0" + this.getDate() : this.getDate();
  return "".concat(yyyy).concat(mm).concat(dd);
};

Date.prototype.yyyymmddhhmm = function() {
  var yyyymmdd = this.yyyymmdd();
  var hh = this.getHours() < 10 ? "0" + this.getHours() : this.getHours();
  var min = this.getMinutes() < 10 ? "0" + this.getMinutes() : this.getMinutes();
  return "".concat(yyyymmdd).concat(hh).concat(min);
};

Date.prototype.yyyymmddhhmmss = function() {
  var yyyymmddhhmm = this.yyyymmddhhmm();
  var ss = this.getSeconds() < 10 ? "0" + this.getSeconds() : this.getSeconds();
  return "".concat(yyyymmddhhmm).concat(ss);
};

var d = new Date();
document.getElementById("a").innerHTML = d.yyyymmdd();
document.getElementById("b").innerHTML = d.yyyymmddhhmm();
document.getElementById("c").innerHTML = d.yyyymmddhhmmss();
<div>
  yyyymmdd: <span id="a"></span>
</div>
<div>
  yyyymmddhhmm: <span id="b"></span>
</div>
<div>
  yyyymmddhhmmss: <span id="c"></span>
</div>


誰かがそれを使用したい場合は、ここでDRYを使用することをお勧めします。同じことを何度も行うのではなく、すでに作成された関数を再利用します。
RiZKiT 2017年

@RiZKiT DRYは原則であり、パターンではありませんが、これは大幅に改善できます。私自身がこれをどこで使用するのであれば、おそらく別のパターンを使用して、メソッドをプロトタイプから遠ざけるでしょう。私は主に、問題を解決する他の方法がどこにあるかを示すために例を書きました。人々がそこからそれを取るところは自分次第です
エリックヘリッツ2017年

いいね!("00" + (this.getDate())).slice(-2)2桁ベースの数値を取得するために使用します。「if」または「?:」ステートメントはなく、.getX()関数の呼び出しは少なくなります。少し速くない場合でも、少なくとも読みやすくなります。
le hollandais volant 2018

22

ネイティブオブジェクトを変更するのは好きではありません。乗算は、受け入れられたソリューションの文字列パディングよりも明確だと思います。

function yyyymmdd(dateIn) {
  var yyyy = dateIn.getFullYear();
  var mm = dateIn.getMonth() + 1; // getMonth() is zero-based
  var dd = dateIn.getDate();
  return String(10000 * yyyy + 100 * mm + dd); // Leading zeros for mm and dd
}

var today = new Date();
console.log(yyyymmdd(today));

フィドル:http : //jsfiddle.net/gbdarren/Ew7Y4/


4
この回答は反対投票されたので、その理由はわかりません。数学は文字列操作よりも速くて明確だと感じました。これが悪い答えである理由を誰かが知っているなら、私に知らせてください。
ダレングリフィス

4
10000乗数は、YYYYを4桁左にシフトするためにあり(月と日の数字はそれぞれ2桁が必要です)、Y10Kバグとは関係ありません。私はこの答えが好きで、尊敬に値します!
A.マッソン2015

1
この答えをありがとう私はここでフィドルを作成しましたjsfiddle.net/amwebexpert/L6j0omb4
A. Masson

1
私は乗算をまったく必要としませんでした、そしてなぜそこにあるのか分かりません。 jsfiddle.net/navyjax2/gbqmv0t5 それ以外の場合は、省略してください。これは素晴らしい答えであり、私を大いに助けてくれました。
vapcguy 2015年

1
@ D-Moneyああ、私はあなたが何を意味するのかを理解しました-あなたはお互いに異なる数学演算を行うのを避けるために数字を一緒に追加することによって異なる種類の連結を行っています-通常の演算を許可しない演算さもなければそれらを台無しにした。よくやった!私はセパレーター(.replace('-', '')OPの質問に答えるためにオンにする必要がある)を使用しているので機能しますが、OPの元の質問に忠実であり、追加の手順は必要ありません。優秀な!
vapcguy 2015年

15

UTCでのDate.toISOString()印刷によって引き起こされる可能性のある日付ジャンプの問題のないプレーンなJS(ES5)ソリューション:

var now = new Date();
var todayUTC = new Date(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate()));
return todayUTC.toISOString().slice(0, 10).replace(/-/g, '');

これは、@ Pierre Guilbertの回答に対する@webersteのコメントへの応答です。


now.getMonth()は1月の場合は0を返し、(now.getMonth()+ 1)になるはずです
Jas

2
違う。日付のUTC関数は、月が0から11の間であることを期待します(ただし、他の<0および> 11は許可されます)。
ヤマネ2015

複数のハイフンを1つのハイフンに置き換えるのはなぜですか?toISOString複数の連続したハイフンを返すことができますか?
ミカエルWitrant

マイケル- 見つかったハイフンを1つのハイフンに置き換えます。それでも理由はわかりません(おそらく、置換文字列はセパレーターの単なるプレースホルダーです)。「g」はすべての出現を意味します。あなたが考えているパターンは/ [-] + / gです
Gerard ONeill

2
あなたは私の日を作りました。私はJavaScriptでの恐ろしいTimeZone処理をバイパスする簡単な方法を何日も探していましたが、これでうまくいきます!
ギヨームF.17年

10

// UTC/GMT 0
document.write('UTC/GMT 0: ' + (new Date()).toISOString().slice(0, 19).replace(/[^0-9]/g, "")); // 20150812013509

// Client local time
document.write('<br/>Local time: ' + (new Date(Date.now()-(new Date()).getTimezoneOffset() * 60000)).toISOString().slice(0, 19).replace(/[^0-9]/g, "")); // 20150812113509


これが私が使った答えです。タイムゾーンを考慮した1つのライナー。元の投稿者の質問に答えるには、次のようにします:(new Date(Date.now()-(new Date())。getTimezoneOffset()* 60000))。toISOString()。replace(/ [^ 0-9] / g、 "").slice(0,8)
tomwoods '26年

thx、使用するYYYY-MM-DDを取得するには:new Date(Date.now()-(new Date())。getTimezoneOffset()* 60000).toISOString()。slice(0、10).replace(/ [ ^ 0-9] / g、 "-")
ニックハンフリー

7

var someDate = new Date();
var dateFormated = someDate.toISOString().substr(0,10);

console.log(dateFormated);


とても賢い。ありがとう
JMaylin 2015年

4
new Date()にはタイムゾーンがあり、Date.toISOString()はUTCであるため、機能しません。私の答えを見てください。
ヤマネ2016年

@Dormouseはその逆ではないですか?new Date()nrのラッパーである新しい日付オブジェクトを作成します。1970年1月1日00:00:00.000 UTC以降のミリ秒 次にtoISOString、ローカルタイムゾーンで出力します。
Stijn de Witt

いいえ、Date.toISOString()はUTCで出力します。
ヤマネ2018

7

もう1つの方法は、スウェーデン、リトアニア、ハンガリー、韓国などのビッグエンディアン日付形式標準toLocaleDateStringを持つロケールで使用することです...

date.toLocaleDateString('se')

区切り文字(-)を削除するには、非数字を置き換えるだけです。

console.log( new Date().toLocaleDateString('se').replace(/\D/g, '') );

これには、UTC日付形式で発生する可能性のある潜在的なエラーはありません。UTC日付は、ローカルタイムゾーンの日付と比較して1日ずれている場合があります。


6

この1行のコードを使用して、年の日付を取得できます

var date = new Date().getFullYear() + "-" + (parseInt(new Date().getMonth()) + 1) + "-" + new Date().getDate();

5

このスレッドで最も人気のある回答の少し簡略化されたバージョンhttps://stackoverflow.com/a/3067896/5437379

function toYYYYMMDD(d) {
    var yyyy = d.getFullYear().toString();
    var mm = (d.getMonth() + 101).toString().slice(-2);
    var dd = (d.getDate() + 100).toString().slice(-2);
    return yyyy + mm + dd;
}

5

dateformatは非常によく使われるパッケージです。

使い方:

dateformatNPMからダウンロードしてインストールします。モジュールで必須:

const dateFormat = require('dateformat');

そして、あなただけのものをフォーマットします:

const myYYYYmmddDate = dateformat(new Date(), 'yyyy-mm-dd');


4

この人はここに=> http://blog.stevenlevithan.com/archives/date-time-formatformat()JavascriptのDateオブジェクトの関数を書いたので、おなじみのリテラル形式で使用できます。

アプリのJavaScriptでフル機能の日付フォーマットが必要な場合は、それを使用してください。そうでなければ、あなたがやりたいことが1つしかない場合は、getYear()、getMonth()、getDay()を連結するのがおそらく最も簡単です。


4

@ooの答えから作業すると、フォーマット文字列に従って日付の文字列が返されます。必要に応じて、年とミリ秒などの2桁の年の正規表現を簡単に追加できます。

Date.prototype.getFromFormat = function(format) {
    var yyyy = this.getFullYear().toString();
    format = format.replace(/yyyy/g, yyyy)
    var mm = (this.getMonth()+1).toString(); 
    format = format.replace(/mm/g, (mm[1]?mm:"0"+mm[0]));
    var dd  = this.getDate().toString();
    format = format.replace(/dd/g, (dd[1]?dd:"0"+dd[0]));
    var hh = this.getHours().toString();
    format = format.replace(/hh/g, (hh[1]?hh:"0"+hh[0]));
    var ii = this.getMinutes().toString();
    format = format.replace(/ii/g, (ii[1]?ii:"0"+ii[0]));
    var ss  = this.getSeconds().toString();
    format = format.replace(/ss/g, (ss[1]?ss:"0"+ss[0]));
    return format;
};

d = new Date();
var date = d.getFromFormat('yyyy-mm-dd hh:ii:ss');
alert(date);

しかし、それがどれほど効率的であるかはわかりません。特に、正規表現を多く使用しているため、パフォーマンスに関しては賢明です。それはおそらく私が純粋なjsをマスターしていないいくつかの作業を使用する可能性があります。


4

このコードは、ピエールギルバートの答えを修正したものです。

(10000年後でも動作します)

YYYYMMDD=new Date().toISOString().slice(0,new Date().toISOString().indexOf("T")).replace(/-/g,"")

4

mootoolsが提供しているようですDate().format()https : //mootools.net/more/docs/1.6.0/Types/Date

ただし、この特定のタスクだけに含める価値があるかどうかはわかりません。


3

これを行う必要がある場合は、通常、以下のコードを使用します。

var date = new Date($.now());
var dateString = (date.getFullYear() + '-'
    + ('0' + (date.getMonth() + 1)).slice(-2)
    + '-' + ('0' + (date.getDate())).slice(-2));
console.log(dateString); //Will print "2015-09-18" when this comment was written

説明すると、.slice(-2)は文字列の最後の2文字を示します。

したがって、何があっても、日または月に「0」を追加し、最後の2つだけを要求できます。これらは常に必要な2つだからです。

したがって、MyDate.getMonth()が9を返す場合、次のようになります。

("0" + "9") // Giving us "09"

したがって、それに.slice(-2)を追加すると、最後の2文字が得られます。

("0" + "9").slice(-2)

"09"

しかし、date.getMonth()が10を返す場合、次のようになります。

("0" + "10") // Giving us "010"

したがって、.slice(-2)を追加すると、最後の2文字が得られます。

("0" + "10").slice(-2)

"10"


3

シンプルさと読みやすさのために別の答え。
また、既存の定義済みクラスメンバーを新しいメソッドで編集することはお勧めしません。

function getDateInYYYYMMDD() {
    let currentDate = new Date();

    // year
    let yyyy = '' + currentDate.getFullYear();

    // month
    let mm = ('0' + (currentDate.getMonth() + 1));  // prepend 0 // +1 is because Jan is 0
    mm = mm.substr(mm.length - 2);                  // take last 2 chars

    // day
    let dd = ('0' + currentDate.getDate());         // prepend 0
    dd = dd.substr(dd.length - 2);                  // take last 2 chars

    return yyyy + "" + mm + "" + dd;
}

var currentDateYYYYMMDD = getDateInYYYYMMDD();
console.log('currentDateYYYYMMDD: ' + currentDateYYYYMMDD);


2

追加の(ただし小さな)ライブラリを含めてもかまわない場合、Sugar.jsはJavaScript で日付を操作するための多くの優れた機能を提供します。日付をフォーマットするには、format関数を使用します

new Date().format("{yyyy}{MM}{dd}")

2

yyyymmdd=x=>(f=x=>(x<10&&'0')+x,x.getFullYear()+f(x.getMonth()+1)+f(x.getDate()));
alert(yyyymmdd(new Date));


1
回答にいくつかの説明を追加すると、賛成票があなたがこのコードでやっていることを少し説明しようとするので、他の人がそれをより明確に理解できます。
ムハンマドオメルアスラム

strictモードまたはtypescriptでは、代わりに「let f、yyyymmdd = x => ...」を使用してください。それ以外の場合、関数yyyymmddおよびfは未定義です。
最大


2

padStartを使用します

Date.prototype.yyyymmdd = function() {
    return [
        this.getFullYear(),
        (this.getMonth()+1).toString().padStart(2, '0'), // getMonth() is zero-based
        this.getDate().toString().padStart(2, '0')
    ].join('-');
};

1

これは、日付時刻の両方のコンポーネントを許可し、数値または文字列としてまったく同じように並べ替えることができる、より一般的なアプローチです。

日付ISO形式の番号順に基づいて、ローカルタイムゾーンに変換し、数字以外を削除します。つまり:

// monkey patch version
Date.prototype.IsoNum = function (n) {
    var tzoffset = this.getTimezoneOffset() * 60000; //offset in milliseconds
    var localISOTime = (new Date(this - tzoffset)).toISOString().slice(0,-1);
    return localISOTime.replace(/[-T:\.Z]/g, '').substring(0,n || 20); // YYYYMMDD
}

使用法

var d = new Date();
// Tue Jul 28 2015 15:02:53 GMT+0200 (W. Europe Daylight Time)
console.log(d.IsoNum(8));  // "20150728"
console.log(d.IsoNum(12)); // "201507281502"
console.log(d.IsoNum());   // "20150728150253272"

1

ネイティブJavaScript:

new Date().toLocaleString('zu-ZA').slice(0,10).replace(/-/g,'');

1
これは、月が2桁になるように月を0で埋めない。
Attila Szeremi

あなたが正しい。私は後でこれに気づきました。2桁の月と日の日付フォーマットを慎重にテストする必要があります。
ロニーベスト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.