サーチ…


構文

  • 新しいDate();
  • 新しい日付(値)。
  • 新しい日付(dateAsString);
  • 新しい日付(年、月[、日[、時間[、分[秒[ミリ秒]]]]);

パラメーター

パラメータ詳細
value 1970年1月1日00:00:00.000 UTC(Unix epoch)からのミリ秒数
dateAsString 文字列としてフォーマットされた日付(詳細は例を参照)
year 日付の年の値。 monthも指定する必要があります。値を指定すると、ミリ秒単位で値が解釈されます。また、 099間の値は特別な意味を持つことに注意してください。例を参照してください。
month 0-11の範囲の月。このパラメータと次のパラメータに指定した範囲外の値を使用してもエラーは発生せず、結果の日付が次の値に「ロールオーバー」されることに注意してください。例を参照してください。
day オプション:日付は1-31の範囲で指定します。
hour オプション:時間( 0-23の範囲)。
minute オプション:分( 0-59の範囲)。
second オプション:秒の範囲は0-59です。
millisecond オプション:ミリ秒( 0-999の範囲0-999

現在の時刻と日付を取得する

new Date()を使用して、現在の日付と時刻を含む新しいDateオブジェクトを生成します。

引数のない Date() new Date(Date.now()) と同じことに 注意してください

日付オブジェクトを取得したら、利用可能ないくつかのメソッドのいずれかを適用してプロパティを抽出することができます(たとえば、 getFullYear()を使用して4桁の年を取得します)。

以下は、一般的な日付のメソッドです。

現在の年を取得する

var year = (new Date()).getFullYear();
console.log(year);
// Sample output: 2016 

現在の月を取得する

var month = (new Date()).getMonth();
console.log(month);
// Sample output: 0 

0 = 1月ですのでご注意ください。ヶ月は0から11までの範囲からですので、追加することが望ましいことが多い+1インデックスに。

現在の日を取得する

var day = (new Date()).getDate();
console.log(day);
// Sample output: 31

現在の時間を取得する

var hours = (new Date()).getHours();
console.log(hours);
// Sample output: 10

現在の分を取得する

var minutes = (new Date()).getMinutes();
console.log(minutes);
// Sample output: 39

現在の秒を取得する

var seconds = (new Date()).getSeconds();
console.log(second);
// Sample output: 48

現在のミリ秒を取得する

Dateオブジェクトのインスタンスのミリ秒( getMilliseconds範囲)を取得するには、 getMillisecondsメソッドを使用します。

var milliseconds = (new Date()).getMilliseconds();
console.log(milliseconds);
 // Output: milliseconds right now

現在の時刻と日付を人間が読める文字列に変換する

var now = new Date();
// convert date to a string in UTC timezone format:
console.log(now.toUTCString());
// Output: Wed, 21 Jun 2017 09:13:01 GMT

静的メソッドDate.now()は、1970年1月1日00:00:00 UTC以降に経過したミリ秒数を返します。 Dateオブジェクトのインスタンスを使用してその時間から経過したミリ秒数を取得するには、 getTimeメソッドを使用しgetTime

// get milliseconds using static method now of Date
console.log(Date.now());

// get milliseconds using method getTime of Date instance
console.log((new Date()).getTime());

新しいDateオブジェクトを作成する

新しいDateオブジェクトを作成するには、 Date()コンストラクタを使用します。

  • 引数なし

    Date()は、現在の時刻(最大ミリ秒)と日付を含むDateインスタンスを作成します。

  • 1つの整数引数

    Date(m)は、Epoch時間(1970年1月1日UTC)+ mミリ秒に対応する時間と日付を含むDateインスタンスを作成します。例: new Date(749019369738)は、日付Sun、26 Sep 1993 04:56:09 GMTを返します。

  • 文字列引数付き

    Date(dateString)は、 dateStringDate.parse解析した結果のDateオブジェクトを返します。

  • 2つ以上の整数引数を持つ

    Date(i1, i2, i3, i4, i5, i6)は年、月、日、時、分、秒、ミリ秒として引数を読み取り、対応するDateオブジェクトをインスタンス化します。 JavaScriptでは月が0でインデックス付けされているため、0は1月を意味し、11は12月を意味します。例: new Date(2017, 5, 1)2017年6月1日を示します。


日々の探検

これらの例は、コードで証明されているように、米国の中部タイムゾーンの夏時間のブラウザで生成されたことに注意してください。 UTCとの比較がDate.prototype.toISOString()あった場合、 Date.prototype.toISOString()を使用して日付と時刻をUTCで表示しました(フォーマットされた文字列のZはUTCを表します)。

// Creates a Date object with the current date and time from the 
// user's browser
var now = new Date();
now.toString() === 'Mon Apr 11 2016 16:10:41 GMT-0500 (Central Daylight Time)' 
// true
// well, at the time of this writing, anyway

// Creates a Date object at the Unix Epoch (i.e., '1970-01-01T00:00:00.000Z')
var epoch = new Date(0);
epoch.toISOString() === '1970-01-01T00:00:00.000Z' // true

// Creates a Date object with the date and time 2,012 milliseconds 
// after the Unix Epoch (i.e., '1970-01-01T00:00:02.012Z').
var ms = new Date(2012); 
date2012.toISOString() === '1970-01-01T00:00:02.012Z' // true

// Creates a Date object with the first day of February of the year 2012 
// in the local timezone.
var one = new Date(2012, 1);
one.toString() === 'Wed Feb 01 2012 00:00:00 GMT-0600 (Central Standard Time)' 
// true

// Creates a Date object with the first day of the year 2012 in the local 
// timezone.
// (Months are zero-based) 
var zero = new Date(2012, 0);
zero.toString() === 'Sun Jan 01 2012 00:00:00 GMT-0600 (Central Standard Time)' 
// true

// Creates a Date object with the first day of the year 2012, in UTC.
var utc = new Date(Date.UTC(2012, 0));
utc.toString() === 'Sat Dec 31 2011 18:00:00 GMT-0600 (Central Standard Time)'
// true
utc.toISOString() === '2012-01-01T00:00:00.000Z'
// true

// Parses a string into a Date object (ISO 8601 format added in ECMAScript 5.1)
// Implementations should assumed UTC because of ISO 8601 format and Z designation
var iso = new Date('2012-01-01T00:00:00.000Z');
iso.toISOString() === '2012-01-01T00:00:00.000Z' // true

// Parses a string into a Date object (RFC in JavaScript 1.0)
var local = new Date('Sun, 01 Jan 2012 00:00:00 -0600');
local.toString() === 'Sun Jan 01 2012 00:00:00 GMT-0600 (Central Standard Time)'
// true

// Parses a string in no particular format, most of the time. Note that parsing
// logic in these cases is very implementation-dependent, and therefore can vary
// across browsers and versions.
var anything = new Date('11/12/2012'); 
anything.toString() === 'Mon Nov 12 2012 00:00:00 GMT-0600 (Central Standard Time)'
// true, in Chrome 49 64-bit on Windows 10 in the en-US locale. Other versions in 
// other locales may get a different result.

// Rolls values outside of a specified range to the next value.
var rollover = new Date(2012, 12, 32, 25, 62, 62, 1023);
rollover.toString() === 'Sat Feb 02 2013 02:03:03 GMT-0600 (Central Standard Time)'
// true; note that the month rolled over to Feb; first the month rolled over to 
// Jan based on the month 12 (11 being December), then again because of the day 32
// (January having 31 days).

// Special dates for years in the range 0-99
var special1 = new Date(12, 0);
special1.toString() === 'Mon Jan 01 1912 00:00:00 GMT-0600 (Central Standard Time)`
// true

// If you actually wanted to set the year to the year 12 CE, you'd need to use the
// setFullYear() method:
special1.setFullYear(12);
special1.toString() === 'Sun Jan 01   12 00:00:00 GMT-0600 (Central Standard Time)`
// true

JSONに変換する

var date1 = new Date();
date1.toJSON();

返品: "2016-04-14T23:49:08.596Z"

UTCからの日付の作成

デフォルトでは、 Dateオブジェクトは現地時間として作成されます。これは、同じタイムゾーンに存在しないサーバーとクライアントの間で日付を通信する場合など、必ずしも望ましいとは限りません。このシナリオでは、日付が現地時間で表示される必要があるまで、それがまったく必要であれば、タイムゾーンについての心配は一切ありません。

問題

この問題では、特定の日付(日、月、年)を異なるタイムゾーンの誰かに伝えたいと考えています。最初の実装ではローカル時間を使用していますが、結果は間違っています。 2番目の実装では、UTCの日付を使用して、必要でない時間帯を回避します。

間違ったアプローチによる邪悪な結果

function formatDate(dayOfWeek, day, month, year) {
  var daysOfWeek = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
  var months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
  return daysOfWeek[dayOfWeek] + " " + months[month] + " " + day + " " + year;
}

//Foo lives in a country with timezone GMT + 1
var birthday = new Date(2000,0,1);
console.log("Foo was born on: " + formatDate(birthday.getDay(), birthday.getDate(),
      birthday.getMonth(), birthday.getFullYear()));

sendToBar(birthday.getTime());

サンプル出力: Foo was born on: Sat Jan 1 2000

//Meanwhile somewhere else...

//Bar lives in a country with timezone GMT - 1
var birthday = new Date(receiveFromFoo());
console.log("Foo was born on: " + formatDate(birthday.getDay(), birthday.getDate(),
      birthday.getMonth(), birthday.getFullYear()));

サンプル出力: Foo was born on: Fri Dec 31 1999

そして、BarはFooが1999年の最後の日に生まれたと常に信じていました。

正しいアプローチ

function formatDate(dayOfWeek, day, month, year) {
  var daysOfWeek = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
  var months = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
  return daysOfWeek[dayOfWeek] + " " + months[month] + " " + day + " " + year;
}

//Foo lives in a country with timezone GMT + 1
var birthday = new Date(Date.UTC(2000,0,1));
console.log("Foo was born on: " + formatDate(birthday.getUTCDay(), birthday.getUTCDate(),
      birthday.getUTCMonth(), birthday.getUTCFullYear()));

sendToBar(birthday.getTime());

サンプル出力: Foo was born on: Sat Jan 1 2000

//Meanwhile somewhere else...

//Bar lives in a country with timezone GMT - 1
var birthday = new Date(receiveFromFoo());
console.log("Foo was born on: " + formatDate(birthday.getUTCDay(), birthday.getUTCDate(), 
      birthday.getUTCMonth(), birthday.getUTCFullYear()));

サンプル出力: Foo was born on: Sat Jan 1 2000

UTCからの日付の作成

UTCまたはGMTに基づいてDateオブジェクトを作成する場合は、 Date.UTC(...)メソッドを使用できます。最長のDateコンストラクタと同じ引数を使います。このメソッドは、1970年1月1日00:00:00 UTCから経過した時刻を表す数値を返します。

console.log(Date.UTC(2000,0,31,12));

サンプル出力: 949320000000

var utcDate = new Date(Date.UTC(2000,0,31,12));
console.log(utcDate);

サンプル出力: Mon Jan 31 2000 13:00:00 GMT+0100 (West-Europa (standaardtijd))

当然のことながら、UTC時間と現地時間の差は、実際には、タイムゾーンオフセットがミリ秒に変換されています。

var utcDate = new Date(Date.UTC(2000,0,31,12));
var localDate = new Date(2000,0,31,12);

console.log(localDate - utcDate === utcDate.getTimezoneOffset() * 60 * 1000);

サンプル出力: true

Dateオブジェクトの変更

setFullYear(...) setDate(...)およびsetFullYear(...)などのすべてのDateオブジェクト修飾子は、現地時間ではなくUTC時間で引数をとります。

var date = new Date();
date.setUTCFullYear(2000,0,31);
date.setUTCHours(12,0,0,0);
console.log(date);

サンプル出力: Mon Jan 31 2000 13:00:00 GMT+0100 (West-Europa (standaardtijd))

他のUTC-固有の修飾子がある.setUTCMonth() .setUTCDate()月の日のために)、 .setUTCMinutes() .setUTCSeconds().setUTCMilliseconds()

getTime()とsetTime()であいまいさを避ける

上記の方法で日付のあいまいさを区別する必要がある場合は、通常、1970年1月1日00:00:00 UTCから経過した時間として日付を伝える方が簡単です。この単一の数字は単一の時刻を表し、必要に応じて現地時間に変換することができます。

var date = new Date(Date.UTC(2000,0,31,12));
var timestamp = date.getTime();
//Alternatively
var timestamp2 = Date.UTC(2000,0,31,12);
console.log(timestamp === timestamp2);

サンプル出力: true

//And when constructing a date from it elsewhere...
var otherDate = new Date(timestamp);

//Represented as an universal date
console.log(otherDate.toUTCString());
//Represented as a local date
console.log(otherDate);

サンプル出力:

Mon, 31 Jan 2000 12:00:00 GMT
Mon Jan 31 2000 13:00:00 GMT+0100 (West-Europa (standaardtijd))

文字列形式に変換する

文字列に変換する

var date1 = new Date();
date1.toString();

返品:「Fri Apr 15 2016 07:48:48 GMT-0400(東部夏時間)」


時刻文字列に変換する

var date1 = new Date();
date1.toTimeString();

返信:「07:48:48 GMT-0400(東部夏時間)」


日付文字列に変換する

var date1 = new Date();
date1.toDateString();

戻り値:2016年4月14日Thu


UTC文字列に変換する

var date1 = new Date();
date1.toUTCString();

返品:「金、2016年4月15日11:48:48 GMT」


ISO文字列に変換する

var date1 = new Date();
date1.toISOString();

返品: "2016-04-14T23:49:08.596Z"


GMT文字列に変換する

var date1 = new Date();
date1.toGMTString();

返品: "木、2014年4月14日23:49:08 GMT"

この関数は非推奨とマークされているため、一部のブラウザでは将来サポートされないことがあります。代わりにtoUTCString()を使用することをお勧めします。


ロケールの日付文字列に変換する

var date1 = new Date();
date1.toLocaleDateString();

返品:「2011年4月14日」

この関数は、デフォルトでユーザーの場所に基づいてロケールセンシティブな日付文字列を返します。

date1.toLocaleDateString([locales [, options]])

特定のロケールを提供するために使用できますが、ブラウザの実装固有のものです。例えば、

date1.toLocaleDateString(["zh", "en-US"]);

フォールバックとして米国英語を使用して中国語ロケールで文字列を印刷しようとします。 optionsパラメータは、特定の書式設定を提供するために使用できます。例えば:

var options = { weekday: 'long', year: 'numeric', month: 'long', day: 'numeric' };
date1.toLocaleDateString([], options);

結果は

「2016年4月14日(木)」

詳細は、MDNを参照しください。

日付オブジェクトをインクリメントする

Javascriptで日付オブジェクトをインクリメントするには、通常これを行うことができます:

var checkoutDate = new Date();    // Thu Jul 21 2016 10:05:13 GMT-0400 (EDT)

checkoutDate.setDate( checkoutDate.getDate() + 1 );

console.log(checkoutDate); // Fri Jul 22 2016 10:05:13 GMT-0400 (EDT)

setDateを使用して、現在の月の日数より大きな値を使用して、翌月の日に日付を変更することができます。

var checkoutDate = new Date();    // Thu Jul 21 2016 10:05:13 GMT-0400 (EDT)
checkoutDate.setDate( checkoutDate.getDate() + 12 );
console.log(checkoutDate); // Tue Aug 02 2016 10:05:13 GMT-0400 (EDT)

getHours()、getMonth()などの他のメソッドにも同じことが当てはまります。

作業日の追加

月曜日から金曜日を想定している就業日を追加したい場合は、週末を考慮するには少し余分なロジックが必要ですが、 setDate関数を使用することができます(これは祝祭日を考慮しません)。

function addWorkDays(startDate, days) {
    // Get the day of the week as a number (0 = Sunday, 1 = Monday, .... 6 = Saturday)
    var dow = startDate.getDay();
    var daysToAdd = days;
    // If the current day is Sunday add one day
    if (dow == 0)
        daysToAdd++;
    // If the start date plus the additional days falls on or after the closest Saturday calculate weekends
    if (dow + daysToAdd >= 6) {
        //Subtract days in current working week from work days
        var remainingWorkDays = daysToAdd - (5 - dow);
        //Add current working week's weekend
        daysToAdd += 2;
        if (remainingWorkDays > 5) {
            //Add two days for each working week by calculating how many weeks are included
            daysToAdd += 2 * Math.floor(remainingWorkDays / 5);
            //Exclude final weekend if remainingWorkDays resolves to an exact number of weeks
            if (remainingWorkDays % 5 == 0)
                daysToAdd -= 2;
        }
    }
    startDate.setDate(startDate.getDate() + daysToAdd);
    return startDate;
}

1970年1月1日から経過したミリ秒数を取得する00:00:00 UTC

静的メソッドDate.nowは、1970年1月1日00:00:00 UTCから経過したミリ秒数を返します。 Dateオブジェクトのインスタンスを使用してその時間から経過したミリ秒数を取得するには、 getTimeメソッドを使用しgetTime

// get milliseconds using static method now of Date
console.log(Date.now());

// get milliseconds using method getTime of Date instance
console.log((new Date()).getTime());

JavaScriptの日付の書式設定

最新のブラウザでのJavaScript日付の書式設定

現代のブラウザー(*)では、 Date.prototype.toLocaleDateString()使用すると、便利な方法でDateの書式を定義できます。

次の形式が必要です。

dateObj.toLocaleDateString([locales [, options]])

localesパラメータは、BCP 47言語タグを含む文字列、またはそのような文字列の配列である必要があります。

optionsパラメータは、次のプロパティの一部またはすべてを持つオブジェクトである必要があります。

  • localeMatcher :可能な値は"lookup""best fit"です。デフォルトは"best fit"
  • timeZone :実装が認識しなければならない唯一の値は"UTC"です。デフォルトはランタイムのデフォルトのタイムゾーンです
  • hour12 :可能な値はtruefalseです。デフォルトはロケールに依存する
  • formatMatcher :可能な値は"basic""best fit"です。デフォルトは"best fit"
  • 平日 :可能な値は"narrow" "short" "long"
  • 時代 :可能な値は"narrow" "short" "long"
  • :可能な値は"numeric""2-digit"
  • month :可能な値は"numeric""2-digit""narrow""short""long"
  • :可能な値は"numeric""2-digit"
  • :可能な値は"numeric""2-digit"
  • :可能な値は"numeric""2-digit"
  • :可能な値は"numeric""2-digit"
  • timeZoneName :可能な値は"short""long"

使い方

var today = new Date().toLocaleDateString('en-GB', {  
    day : 'numeric',
    month : 'short',
    year : 'numeric'
});

1月24日に実行されると出力されます。

'24 Jan 2036'

カスタムに行く

Date.prototype.toLocaleDateString()が必要な処理を実行できるほど柔軟でない場合は、次のようなカスタムDateオブジェクトを作成することを検討してください。

var DateObject = (function() {
    var monthNames = [
      "January", "February", "March",
      "April", "May", "June", "July",
      "August", "September", "October",
      "November", "December"
    ];
    var date = function(str) {
        this.set(str);
    };
    date.prototype = {
        set : function(str) {
            var dateDef = str ? new Date(str) : new Date();
            this.day = dateDef.getDate();
            this.dayPadded = (this.day < 10) ? ("0" + this.day) : "" + this.day;
            this.month = dateDef.getMonth() + 1;
            this.monthPadded = (this.month < 10) ? ("0" + this.month) : "" + this.month;
            this.monthName = monthNames[this.month - 1];
            this.year = dateDef.getFullYear();
        },
        get : function(properties, separator) {
            var separator = separator ? separator : '-'
                ret = [];
            for(var i in properties) {
                ret.push(this[properties[i]]);
            }
            return ret.join(separator);
        }
    };
    return date;
})();

そのコードをインクルードし、2019年1月20日にnew DateObject()を実行すると、次のプロパティを持つオブジェクトが生成されます。

day: 20
dayPadded: "20"
month: 1
monthPadded: "01"
monthName: "January"
year: 2019

書式設定された文字列を取得するには、次のようにします。

new DateObject().get(['dayPadded', 'monthPadded', 'year']);

これは、次の出力を生成します。

20-01-2016

(*) MDNよると 、「最新のブラウザ」とはChrome 24+、Firefox 29+、IE11、Edge12 +、Opera 15+、Safari nightly build



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow