mmyoji's diary

プログラミングとか日々のどうでもいいこととか

jsのDateオブジェクトが意外と賢い

意外と賢いです。

最近無駄にjsでカレンダー自作してて、変に頑張ったりしてたんですが、今日Dateオブジェクトが賢いことに気づいたので残しておきます。

import dateFormat from "dateformat"

const FORMAT = "yyyy/mm/dd"

var today = new Date()
dateFormat(today, FORMAT)
// "2015/09/03"

const year = today.getFullYear()
const month = today.getMonth()

var lastMonth = {
  /* `日` の部分に0を渡すことで1の一個前、つまり先月の末日が取得できる */
  lastDate: new Date(year, month, 0)
}
dateFormat(lastMonth.lastDate, FORMAT)
// "2015/08/31"

ここまでは「ふむふむ」って感じだったんですが、 には負の値や31以上の値を当てはめることもできます。 ちょっと考えればわかりそうなものですが、アホなので仕方ない

/* 変数とかは上のやつ持ち越します */

var date = new Date(year, month, -4)
dateFormat(date, FORMAT)
// "2015/08/27"

/* 9月は30日まで */
var anotherDate = new Date(year, month, 33)
dateFormat(anotherDate, FORMAT)
// "2015/10/03"

知ってる人は知ってるし、あんま使うことないって人にはどうでもいい情報ですが、一人で感動してました。

おまけ

日付とかをここまでガリガリ書くことなかったので、 を表すのに変数名とかどうしよう(><)とか一人で困ってましたが以下のルールで統一してました。

  • 年: year
  • 月: month
  • 日: date
  • 曜日: day
  • 月初: firstDate
  • 月末: lastDate
  • 範囲を選択する際:
    • 最初の日付: startDate
    • 最後の日付: endDate

dateday の区別に関しては date.getDate() , date.getDay() から単純に決めました。

あとcollectionに関しては day という単語に関しては days ってしても特に違和感無さ気に見えましたが、 dates は明らかにキモいので dateList とかで逃げて表現したりしてました。

ほんとどうでも良すぎてブーイング食らってもおかしくないレベル。またインターネットの大海にゴミを放置します。すいません。

おしまい。