あなたが知らないかもしれないDate類


DateはJSの重要な組み込みオブジェクトであり、その例は主に時間と日付を処理するために使用され、その時間は1970-1-1(世界標準時間)からのミリ秒数に基づいており、タイムスタンプの長さは13ビット(Unixタイムスタンプの長さ10ビットとは異なる)である.日付と時間については、シーンを無数に使用しているので、詳細や約束に特に注意する必要があります.
1.コンストラクタ
new Date()によってインスタンス化することができ、Date()を直接実行すると時間文字列が得られることに留意されたい.
new Date();
new Date(value);
new Date(dateString);
new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);

ここで、コンストラクション関数のパラメータの説明(MDN参照):
  • パラメータが入力されていない場合、Dateのコンストラクタはシステムが設定した現在の時間に基づいてDateオブジェクトを作成します.
  • 少なくとも2つのパラメータが指定されている場合、残りのパラメータはデフォルトで1(dayパラメータが指定されていない場合)または0に設定されます.
  • JavaScriptの時間は世界標準時間(UTC)1970年1月1日からミリ秒で計時され、1日86400000ミリ秒からなる.Dateオブジェクトの範囲は、-10000000日から10000000日(ミリ秒の等価値)です.
  • JavaScriptのDateオブジェクトは、プラットフォーム間で統一された動作を提供します.時間プロパティは、異なるシステムで同じ時刻を表すことができますが、ローカル時間オブジェクトが使用されている場合は、ローカル時間を反映します.
  • JavaScriptのDateオブジェクトは、いくつかのUTC時間の方法を提供し、それに応じて現地時間の方法も提供します.UTC、つまり私たちが言うグリニッジ時間とは、timeの世界時間基準を指します.現地時間とは、JavaScriptを実行するクライアントコンピュータが設定した時間です.
  • JavaScriptのDateオブジェクト(i.e.newオペレータを使用しない)を関数として呼び出すと、現在の日付と時間を表す文字列が返されます.

  • 2.NULL処理
    //  chrome  
    new Date();
    // Mon Oct 23 2017 23:38:02 GMT+0800 (CST)
    
    new Date(false);
    // Thu Jan 01 1970 08:00:00 GMT+0800 (CST)
    
    new Date(0);
    // Thu Jan 01 1970 08:00:00 GMT+0800 (CST)
    
    new Date(null);
    // Thu Jan 01 1970 08:00:00 GMT+0800 (CST)
    
    new Date('');
    // Invalid Date
    
    new Date(undefined);
    // Invalid Date

    3.特別提示
    [Firefox]
    new Date('2012-07-08 00:00:00')などの'-'付きの完全な時間はサポートされていませんが、new Date('2012-07-08')は正しい値です.
    [month]
  • new Date(year,month,...)のmonthは0から
  • を計算する.
    4.値の境界
    実行環境によって境界値が異なり、Chromeでは負の値でもサポートされます.実際の本番環境では、時間の表示だけでなく、ストレージ、計算なども考慮する必要があります.そのため、特定のシーンでは、データベースやブラウザのDateの有効範囲をできるだけ考慮する必要があります.
    データベースDerbyの記憶時間を例にとると、その境界は次のとおりである.
    説明
    境界値
    最小日付
    0001-01-01
    最大日付
    9999-12-31
    最小時間
    00:00:00
    最大時間
    24:00:00
    最小タイムスタンプ
    0001-01-01-00.00.00.000000
    最大タイムスタンプ
    9999-12-31-23.59.59.999999 mysqlにおいて、その範囲は1000-01-01 to 9999-12-31と定義される.jsにおいて、タイムスタンプの最小値は-8640000000000000、すなわち紀元前271821年4月20日、最大値は8640000000000000、すなわち275760年9月13日である.仕様中の時間範囲は1970/1/1前後100,000,000日である.
    5.2038年虫
    2038年以降はタイムスタンプが足りないそうです.
    コンピュータアプリケーションでは、2038年に問題が発生すると、2038年に一部のソフトウェアが正常に動作しない可能性があります.UNIX時間を使用して時間を表すすべてのプログラムは、1970年1月1日から経過した秒数(閏秒を無視)で時間を表すため、影響を受けます.この時間表現法はクラスUnix(Unix-like)オペレーティングシステムにおいて標準であり,そのCプログラミング言語で他のオペレーティングシステムの大部分に開発されて使用されるソフトウェアに影響を及ぼす.32ビットオペレーティングシステムの大部分では、この「time_t」データ・モードは、計算された秒数を正負の32ビット整数(signedint 32)で格納します.この「time_t」規格によれば、このフォーマットが表す最後の時刻は2038年1月19日03:14:07、火曜日(UTC)である.この瞬間を超えると、時間は隠され、内部では負の数として表され、この時間を2038年と認識できず、個別の実作によって1970年または1901年に戻る可能性があるため、プログラムが動作しなくなる.エラーの計算や動作が発生する可能性があります.
    実際には第4部を参考にして、Dateの上限は余裕があります.手元の設備を持って2038年にどのような異状が現れるかをテストすることができます.
    6.参考
    1、EmacScript言語仕様-http://ecma-international.org/ecma-262/5.1/#sec-15.92、Mysql時間範囲-https://dev.mysql.com/doc/refman/5.5/en/datetime.html3、JSタイムスタンプ境界-https://stackoverflow.com/questions/11526504/minimum-and-maximum-date
    7.ライブラリ
  • moment-重量級時間処理ライブラリ、時間解析、フォーマット、計算などをサポートし、機能が強く、ブラウザとNodeをサポートする.js,圧縮後体積約16.3 KB
  • date-fns-momentより軽量レベルのイベントハンドラライブラリ、より小さな
  • dayjs-より軽量級のmoment.js