1. ホーム
  2. javascript

[解決済み] JS開始時点・終了時点

2022-10-08 06:20:03

質問

year=2014、month=9(2014年9月)が与えられたJSの日付を計算したいのですが、どうすればよいでしょうか?

私はこれを試してみました。

var moment = require('moment');
var startDate = moment( year+'-'+month+'-'+01 + ' 00:00:00' );
            var endDate = startDate.endOf('month');
            console.log(startDate.toDate());
            console.log(endDate.toDate());

両方のログを見ると

Tue Sep 30 2014 23:59:59 GMT+0200 (CEST)
Tue Sep 30 2014 23:59:59 GMT+0200 (CEST)

終了日は正しいのですが...なぜ開始日ではないのでしょうか?

どのように解決するのですか?

それは endOf は元の値を変異させるからです。

関連する引用を行います。

<ブロッククオート

単位時間の終わりに設定することで、元の瞬間を変異させます。

欲しい出力を得るための関数例です。

function getMonthDateRange(year, month) {
    var moment = require('moment');

    // month in moment is 0 based, so 9 is actually october, subtract 1 to compensate
    // array is 'year', 'month', 'day', etc
    var startDate = moment([year, month - 1]);

    // Clone the value before .endOf()
    var endDate = moment(startDate).endOf('month');

    // just for demonstration:
    console.log(startDate.toDate());
    console.log(endDate.toDate());

    // make sure to call toDate() for plain JavaScript date type
    return { start: startDate, end: endDate };
}

参考文献です。