Skip to content

Instantly share code, notes, and snippets.

@aliyome
Last active April 22, 2024 05:52
Show Gist options
  • Save aliyome/291145f8447475c1076a3c7ff1def5d1 to your computer and use it in GitHub Desktop.
Save aliyome/291145f8447475c1076a3c7ff1def5d1 to your computer and use it in GitHub Desktop.

day.js の tips

/** dayjs.tz.setDefault("Asia/Tokyo") している前提 */
/** 現在日時が 2024-04-22T08:00:00+09:00 のとき */
const date = new Date("2024-04-22T08:00:00+09:00")

// 現在日時(JST)
dayjs.tz().toDate()  // 2024-04-21T23:00:00.000Z = 2024-04-22T08:00:00+09:00

// 文字列(JST)のパース
dayjs.tz("2021-09-01", "YYYY-MM-DD", JAPAN_TIMEZONE).toDate()  // 2021-08-31T15:00:00.000Z = 2021-09-01T00:00:00+09:00

// 文字列(JST)に変換
dayjs.tz(date).format("YYYY-MM-DD HH:mm:ss")  // 2024-04-22 08:00:00

// 日時(JST)の加減算
dayjs.tz(date).add(1, "day").toDate()         // 2024-04-22T23:00:00.000Z = 2024-04-23T08:00:00+09:00
dayjs.tz(date).subtract(1, "month").toDate()  // 2024-03-21T23:00:00.000Z = 2024-03-22T08:00:00+09:00

// 月初日・月末日(JST)
dayjs.tz(date).startOf("month").toDate()  // 2024-03-31T15:00:00.000Z = 2024-04-01T00:00:00+09:00
dayjs.tz(date).endOf("month").toDate()    // 2024-04-30T14:59:59.999Z = 2024-04-30T23:59:59+09:00

// 部分的に特定の日時(JST)を設定
dayjs.tz(date)
  .hour(0).minute(0).second(0).millisecond(0)
  .toDate()                                   // 2024-04-21T15:00:00.000Z = 2024-04-22T00:00:00+09:00

// 差分の計算
dayjs.tz(to).diff(from, 'hours')

// JSTの日付や時刻を取得
dayjs.tz(date).hour()  // 時
dayjs.tz(date).date()  // 日
dayjs.tz(date).month() // 月
dayjs.tz(date).year()  // 年
dayjs.tz(date).day()   // 曜日(0-6) 0:日曜日
dayjs.tz(date).daysInMonth() // 月の日数(28-31)

/**
 * NG
 */
dayjs(date) // 実行環境のタイムゾーンに依存する。この呼び出し自体は問題ないが、JST の日時を期待して .date() や .format() すると UTC の日時が返る
dayjs("2021-09-01", "YYYY-MM") // 実行環境のタイムゾーンに依存する
dayjs().tz(JAPAN_TIMEZONE, true)  // オフセットが加算されるので toDate すると実際の日時ではなくなる
dayjs.tz(date).add(JAPAN_TIMEZONE_OFFSET, "hours") // 本当にオフセットを加算する必要があるのかよく考えること。だいたいは必要ないはず
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment