Date
Dateオブジェクト
年月日や時刻を扱うためのオブジェクトです。現在の年月日と時刻を取得する方法です。
Dateで扱う月は0から始まります。
1月が0月、になります。気を付けてください。

    var dt = new Date();
    console.log(dt);//Fri Apr 29 2022 10:11:03 GMT+0900 (日本標準時)

今以外の現在の年月日と時刻を指定する方法です。

    var dt1 = new Date("2019/10/19");
    console.log(dt1);//Sat Oct 19 2019 00:00:00 GMT+0900 (日本標準時)
    var dt2 = new Date(2019,10,19);
    console.log(dt2);//Tue Nov 19 2019 00:00:00 GMT+0900 (日本標準時)
    var dt3 = new Date(2019,10,19,13,30,45);
    console.log(dt3);//Tue Nov 19 2019 13:30:45 GMT+0900 (日本標準時)

Dateオブジェクトの引き算はどうなるでしょうか?

    var dt2 = new Date(2019,10,19);
    console.log(dt2);
    var dt3 = new Date(2019,10,19,00,00,01);
    var dif = dt3 - dt2;
    console.log(dif);//1000
    console.log(typeof(dif));//number

1000?
期待していた時刻表示になっていません。Dateは1970年1月1日0時0分0秒を起点とした ミリ秒の経過時間となっています。それなので引き算した結果の1秒は1000ミリ秒です。 つまりDateの引き算はミリ秒の経過時間となります。足し算はどうなるでしょうか?

    var dt2 = new Date(2019,10,19);
    console.log(dt2);
    var dt3 = new Date(2019,10,19,00,00,01);
    var dif = dt3 + dt2;
    console.log(dif);//Tue Nov 19 2019 00:00:01 GMT+0900 (日本標準時)Tue Nov 19 2019 00:00:00 GMT+0900 (日本標準時)
    console.log(typeof(dif));//string

引き算と結果が違います。文字列として処理されています。日付の足し算はありえないですよね。
次に例えば30日後はいつ?
Dateオブジェクトは他の言語に比べてちょっと貧弱です。何かやるには自力でやります。
サンプルコードです。

    function calcDate(date, days){
        var ms = date.getTime() + days * 1000 * 60 * 60 * 24;
        date.setTime(ms);
        return date;
    }
   var date = new Date(2022,0,1,00,00,00);
   var nextDay = calcDate(date, -1);
   console.log(nextDay);//Fri Dec 31 2021 00:00:00 GMT+0900 (日本標準時)

関数calcDateはdateで指定した日時にdayで指定した日にちを加算した 日時を処理します。

次に2つの年月日の間隔をdd日hh時間mm分ss秒で取得する関数です。

    function dateSpan(date1, date2){
        var span = Math.abs(date1.getTime() - date2.getTime());
        span /= 1000;//to second
        var s = span % 60;
        span -= s;
        span /= 60;
        var m = span % 60;
        span -= m;
        span /= 60;
        var h = span % 24;
        span -= h;
        span /= 24;
        
        var dd = span;
        var str = "";
        if(dd > 0){
            str += ("" + dd + "日");
            str += ("" + h + "時間");
            str += ("" + m + "分");
            str += ("" + s + "秒");
        }
        else{
            str += ("" + h + "時間");
            str += ("" + m + "分");
            str += ("" + s + "秒");
        }
        return str;
    }
    var date1 = new Date(2019,1,1,00,00,00);
    var data2 = new Date(2019,1,5,23,59,05);
    console.log(dateSpan(date1, data2));//4日23時間59分5秒

2つのサンプルコードを示しましたが、Dateオブジェクトで大事なメソッドは、
getTime()
setTime()
です。

メソッド
日付の取得
メソッド 説明
getFullYear() 年の値を返す
getMonth() 月の値を返す
getDate() 日の値を返す
getDay() 曜日(日曜:0 土曜:6)の値を返す
getHours() 時を返す
getMinutes() 分を返す
getSeconds() 秒を返す
getMilliseconds() ミリ秒を返す
getTime() 1970年1月1日0時0分0秒を起点とした ミリ秒の経過時間を返す
getTimezoneOffset() 世界時との誤差を分単位で返す


日付の設定
メソッド 説明
setFullYear() 年の値を設定する
setMonth() 月の値を設定する
setDate() 日の値を設定する
setHours() 時を設定する
setMinutes() 分を設定する
setSeconds() 秒を設定する
setMilliseconds() ミリ秒を設定する
setTime() 1970年1月1日0時0分0秒を起点とした ミリ秒の経過時間を設定する


日付の取得(UTC)
メソッド 説明
getUTCFullYear() 年の値を返す
getUTCMonth() 月の値を返す
getUTCDate() 日の値を返す
getUTCDay() 曜日(日曜:0 土曜:6)の値を返す
getUTCHours() 時を返す
getUTCMinutes() 分を返す
getUTCSeconds() 秒を返す
getUTCMilliseconds() ミリ秒を返す


日付の設定(UTC)
メソッド 説明
setUTCFullYear() 年の値を設定する
setUTCMonth() 月の値を設定する
setUTCDate() 日の値を設定する
setUTCHours() 時を設定する
setUTCMinutes() 分を設定する
setUTCSeconds() 秒を設定する
setUTCMilliseconds() ミリ秒を設定する


文字列への変換
メソッド 説明
toGMTString() GMT(グリニッジ標準時)へ変換する
toUTCString() UTC(協定世界時)へ変換する
toLocaleString() 現地時刻を使用して変換する
toDateString() 日付を文字列として返す
toTimeString() 時刻を文字列として返す
toLocaleDateString() 現地時刻に対応した日付を返す
toLocaleTimeString() 現地時刻に対応した時刻を返す
toString() 日時の文字列を返す


日付データの解析
メソッド 説明
now() 現在と1970年1月1日0時0分0秒を起点とした ミリ秒の経過時間を取得する
parse(string) 時刻を表す文字列から1970年1月1日0時0分0秒を起点とした ミリ秒の経過時間を取得する
UTC(yy,mm,dd(,h,m,s)) UTCで指定した時刻から1970年1月1日0時0分0秒を起点とした ミリ秒の経過時間を取得する


その他
メソッド 説明
valueOf() getTime()と同じ値を返す