web-dev-qa-db-ja.com

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

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

334
IVR Avenger

私がよく使うコードを変更しました:

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();
566
o-o

プロトタイプに追加するのは好きではありませんでした。代替案は次のようになります。

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;
280
Pierre Guilbert

ToISOString関数を使うことができます。

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

それはあなたに "yyyy-mm-dd"フォーマットを与えるでしょう。

153
Ramzi SAYAGH

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

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

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

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

私は通常あまりにも多くのライブラリをインポートしたくありません。しかしjQuery UIはとても便利です。おそらくあなたのプロジェクトのどこかでそれを使うでしょう。

その他の例については、 http://api.jqueryui.com/datepicker/ をご覧ください。

35
NLemay

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

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

O-oの答えに加えて、戻り値から論理演算を分離し、代わりにそれらを変数に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 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();
   var hh = this.getHours() < 10 ? "0" + this.getHours() : this.getHours();
   var min = this.getMinutes() < 10 ? "0" + this.getMinutes() : this.getMinutes();
   return "".concat(yyyy).concat(mm).concat(dd).concat(hh).concat(min);
  };

 Date.prototype.yyyymmddhhmmss = 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();
   var hh = this.getHours() < 10 ? "0" + this.getHours() : this.getHours();
   var min = this.getMinutes() < 10 ? "0" + this.getMinutes() : this.getMinutes();
   var ss = this.getSeconds() < 10 ? "0" + this.getSeconds() : this.getSeconds();
   return "".concat(yyyy).concat(mm).concat(dd).concat(hh).concat(min).concat(ss);
  };

var d = new Date();
d.yyyymmdd();
d.yyyymmddhhmm();
d.yyyymmddhhmmss();

RiZKiTが示唆しているように、もう少しDRYをいじる

https://jsfiddle.net/EricHerlitz/tuhhfxz9/ /

23
Eric Herlitz
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'
18
gongqj

私はネイティブオブジェクトを修正するのは好きではありません、そして私は乗算が受け入れられた解決策をパディングするストリングより明確であると思います。

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/ /

16
D-Money

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のコメントに応えて。

13
Dormouse
// 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
10
Kus
var someDate = new Date();
var dateFormated = someDate.toISOString().substr(0,10);

console.log(dateFormated);
8
Tomas Šivickas

もう一つの方法は toLocaleDateStringビッグエンディアンの日付フォーマット標準を持つロケールで使用することです 、例えばスウェーデン、リトアニア、ハンガリー、韓国、...:

date.toLocaleDateString('se')

区切り文字(-)を削除するのは、数字以外の文字を置き換えるだけのことです。

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

これは、UTC日付形式で発生する可能性のあるエラーを持っていません。UTC日付は、ローカルタイムゾーンの日付に比べて1日ずれている可能性があります。

6
trincot

あなたは単に年の日付を取得するためにThis one line codeを使うことができます

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

このスレッドで最も人気のある答えのための少し簡略化されたバージョン 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
Hero Qu

このコードは、Pierre Guilbertの答えを修正したものです。

(それは1万年後でも機能します)

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

この人はここに=> http://blog.stevenlevithan.com/archives/date-time-format JavascriptのDateオブジェクトのためのformat()関数を書いたので、それはよく知られたリテラルフォーマットで使用することができます。

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

4
Strelok

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

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

3
Oren_H

Day.js はどうですか。

それはたった2KBです、そしてあなたはdayjs().format('YYYY-MM-DD')もできます。

https://github.com/iamkun/dayjs

3
NoobTW

私はこれをする必要があるとき私は通常下記のコードを使用します。

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
Ogglas

@ o-oの答えから作業すると、フォーマット文字列に従って日付の文字列が返されます。必要に応じて、年とミリ秒などに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を習得していないいくつかの仕事を使用することができます。

3
Tom Toms

AngularJs(最大1.5)を使用している場合は、 日付フィルタ :を使用できます。

var formattedDate = $filter('date')(myDate, 'yyyyMMdd')
3
sarin

dateformat は非常によく使われているパッケージで、 moment.js よりもはるかに堅牢で使いやすいと思います。

使い方:

NPMからdateformatをダウンロードしてインストールします。あなたのモジュールでそれを必要とします:

var dateFormat = require('dateformat');

それからあなたのものをフォーマットするだけです:

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

3
Milkncookiez

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

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

date-shortcode 救助へ!

const dateShortcode = require('date-shortcode')
dateShortcode.parse('{YYYYMMDD}', new Date())
//=> '20180304'
2
Kodie Grantham

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

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

ネイティブJavascript:

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

これは、 date time の両方のコンポーネントを許可する、より一般的なアプローチで、numberまたはstringのどちらかと同じようにソート可能です。

Date 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
chriskelly
yyyymmdd=x=>(f=x=>(x<10&&'0')+x,x.getFullYear()+f(x.getMonth()+1)+f(x.getDate()));
alert(yyyymmdd(new Date));
1
Enam

私の場合、@ o-o解決策は機能しません。私の解決策は次のとおりです。

Date.prototype.yyyymmdd = function() {
  var mm = this.getMonth() + 1; // getMonth() is zero-based
  var dd = this.getDate();
  var ret = [this.getFullYear(), (mm<10)?'0':'', mm, (dd<10)?'0':'', dd].join('');

  return ret; // padding
};
0
fiorentinoing

これは https://stackoverflow.com/users/318563/o-o からの回答に対するちょっとした改善です。

Date.prototype.ddmmyyyy = function(delimiter) {
    var yyyy = this.getFullYear().toString();
    var mm = (this.getMonth()+1).toString(); // getMonth() is zero-based
    var dd  = this.getDate().toString();
    return (dd[1]?dd:"0"+dd[0]) + delimiter + (mm[1]?mm:"0"+mm[0]) + delimiter +yyyy  ; // padding
};

誰にでも役立つことを願っています!

:)

0
Ismael Terreno

私はJavaScriptの日付オブジェクトを操作するための簡単なライブラリを書きます。これを試すことができます。

var dateString = timeSolver.getString(date, "YYYYMMDD")

ここの図書館: https://github.com/sean1093/timeSolver

0
sean1093

いい、そして簡単:

    var date = new Date();
    var yyyy = date.getFullYear();
    var mm = date.getMonth() + 1; // getMonth() is zero-based
    if (mm < 10) mm='0'+mm;
    var dd = date.getDate();
    if (dd < 10) dd='0'+dd;
    /*date.yyyymmdd();*/

    console.log('test - '+yyyy+'-'+mm+'-'+dd);
0
user6750900

現地日付をYYYYMMDD形式で取得するには、imを使用します。

var todayDate = (new Date()).toLocaleString('en-GB').slice(0,10).split("\/").reverse().join("");
0
Boaz Saragossi
Try this:

function showdate(){

var a = new Date();
var b = a.getFullYear();
var c = a.getMonth();
(++c < 10)? c = "0" + c : c;
var d = a.getDate();
(d < 10)? d = "0" + d : d;
var final = b + "-" + c + "-" + d; 

return final;


} 

document.getElementById("todays_date").innerHTML = showdate();
0
Devin Gray

Date.jsには便利な日付解析方法がたくさんあります。

require("datejs")

(new Date()).toString("yyyyMMdd")

0
Tan Wang

この記事は私がこのヘルパーを書くのを助けました、それで私が誰かがこの解決策を探しているならばそれを共有します、それはyyyy、mm、ddのすべてのバリエーションをサポートします

Date.prototype.formattedDate = function (pattern) {
    formattedDate = pattern.replace('yyyy', this.getFullYear().toString());
    var mm = (this.getMonth() + 1).toString(); // getMonth() is zero-based
    mm = mm.length > 1 ? mm : '0' + mm;
    formattedDate = formattedDate.replace('mm', mm);
    var dd = this.getDate().toString();
    dd = dd.length > 1 ? dd : '0' + dd;
    formattedDate = formattedDate.replace('dd', dd);
    return formattedDate;
};

d = new Date();
pattern = 'yyyymmdd';  // 20150813
d.formattedDate(pattern);

pattern = 'yyyy-mm-dd';
d.formattedDate(pattern); // 2015-08-13
0
talsibony

この機能が役に立つことを願っています

function formatDate(dDate,sMode){       
        var today = dDate;
        var dd = today.getDate();
        var mm = today.getMonth()+1; //January is 0!
        var yyyy = today.getFullYear();
        if(dd<10) {
            dd = '0'+dd
        } 
        if(mm<10) {
            mm = '0'+mm
        } 
        if (sMode+""==""){
            sMode = "dd/mm/yyyy";
        }
        if (sMode == "yyyy-mm-dd"){
            return  yyyy + "-" + mm + "-" + dd + "";
        }
        if (sMode == "dd/mm/yyyy"){
            return  dd + "/" + mm + "/" + yyyy;
        }

    }
0
Matias Osmerini

あなたは以下のようにあなた自身の機能を作成することができます

function toString(o, regex) {
    try {
        if (!o) return '';
        if (typeof o.getMonth === 'function' && !!regex) {
            let splitChar = regex.indexOf('/') > -1 ? '/' : regex.indexOf('-') > -1 ? '-' : regex.indexOf('.') > -1 ? '.' : '';
            let dateSeparate = regex.split(splitChar);
            let result = '';
            for (let item of dateSeparate) {
                let val = '';
                switch (item) {
                    case 'd':
                        val = o.getDate();
                        break;
                    case 'dd':
                        val = this.date2Char(o.getDate());
                        break;
                    case 'M':
                        val = o.getMonth() + 1;
                        break;
                    case 'MM':
                        val = this.date2Char(o.getMonth() + 1);
                        break;
                    case 'yyyy':
                        val = o.getFullYear();
                        break;
                    case 'yy':
                        val = this.date2Char(o.getFullYear());
                        break;
                    default:
                        break;
                }
                result += val + splitChar;
            }
            return result.substring(0, result.length - 1);
        } else {
            return o.toString();
        }
    } catch(ex) { return ''; }
}

function concatDateToString(args) {
    if (!args.length) return '';
    let result = '';
    for (let i = 1; i < args.length; i++) {
        result += args[i] + args[0];
    }
    return result.substring(0, result.length - 1);
}

function date2Char(d){
    return this.rightString('0' + d);
}

function rightString(o) {
    return o.substr(o.length - 2);
}

中古:

var a = new Date();
console.log('dd/MM/yyyy: ' + toString(a, 'dd/MM/yyyy'));
console.log('MM/dd/yyyy: ' + toString(a, 'MM/dd/yyyy'));
console.log('dd/MM/yy: ' + toString(a, 'dd/MM/yy'));
console.log('MM/dd/yy: ' + toString(a, 'MM/dd/yy'));
0
Trung

確かに、日付文字列表現のバリエーションごとに特定の関数を構築できます。あなたが国際的な日付フォーマットを考えるならば、あなたは特別な名前で区別するのが難しい数十の特定の機能に巻きついています。

すべての形式に一致する妥当な機能はありませんが、以下のような妥当な機能構成があります。

const pipe2 = f => g => x =>
  g(f(x));

const pipe3 = f => g => h => x =>
  h(g(f(x)));

const invoke = (method, ...args) => o =>
  o[method] (...args);

const padl = (c, n) => s =>
  c.repeat(n)
    .concat(s)
    .slice(-n);

const inc = n => n + 1;

// generic format date function

const formatDate = stor => (...args) => date =>
  args.map(f => f(date))
    .join(stor);

// MAIN

const toYYYYMMDD = formatDate("") (
  invoke("getFullYear"),
  pipe3(invoke("getMonth")) (inc) (padl("0", 2)),
  pipe2(invoke("getDate")) (padl("0", 2)));

console.log(toYYYYMMDD(new Date()));

はい、これはたくさんのコードです。しかし、高階関数formatDateに渡される関数の引数を変更するだけで、文字列のすべての日付表現を文字通り表現することができます。すべてが明示的かつ宣言的です。つまり、何が起こっているのかをほとんど読むことができます。

0
user10675354