1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

JavaScript Dateメモ

Posted at

JavaScript Dateメモ

全般

  • 時刻値 (time value) は、epoch(1970-01-01T00:00:00.000Z)からの経過ミリ秒を示す整数値として保持される。

    > new Date(0)
    1970-01-01T00:00:00.000Z
    > new Date(1)
    1970-01-01T00:00:00.001Z
    
  • epochより過去は負の時刻値として表現される。

    > new Date(-1000)
    1969-12-31T23:59:59.000Z
    
  • 時刻値にうるう秒は表現されない。例えば2016-12-31T23:59:60Zを示す時刻値は存在しない。

    > new Date(1483228799999)
    2016-12-31T23:59:59.999Z
    > new Date(1483228800000)
    2017-01-01T00:00:00.000Z
    > new Date('2016-12-31T23:59:60Z').getTime()
    NaN
    
  • 既存Dateオブジェクトの時刻値は、getTime() または valueOf() で取得できる。getTime()valueOf() は同じ結果を返す。

    > new Date('2023-01-01T00:00:00.000Z').valueOf()
    1672531200000
    > new Date('2023-01-01T00:00:00.000Z').getTime()
    1672531200000
    
  • 標準の日時文字列書式は YYYY-MM-DDTHH:mm:ss.sssZ

タイムゾーン

  • オブジェクトの持つタイムゾーン情報は、ローカルシステムのタイムゾーンとなる。オブジェクト生成時に指定したタイムゾーンは保持されない。

    > const dateFromUtc = new Date('2023-01-02T03:04:05.678Z')
    undefined
    > const dateFromJst = new Date('2023-01-02T12:04:05.678+09:00')
    undefined
    > dateFromUtc.getHours()
    12
    > dateFromJst.getHours()
    12
    > dateFromUtc.toISOString()
    '2023-01-02T03:04:05.678Z'
    > dateFromJst.toISOString()
    '2023-01-02T03:04:05.678Z'
    > dateFromUtc.getTimezoneOffset()
    -540
    > dateFromJst.getTimezoneOffset()
    -540
    > dateFromUtc.getTime() === dateFromJst.getTime()
    true
    
  • Date オブジェクト生成時にタイムゾーン無しの日時文字列を渡すと、ローカルタイムの時刻とみなされる。混乱をなくすためには必ずタイムゾーンを明示すべき。

    > new Date('2023-01-01T00:00:00').toISOString()  // タイムゾーン指定なし
    '2022-12-31T15:00:00.000Z'
    > new Date('2023-01-01T00:00:00Z').toISOString()  // UTC指定
    '2023-01-01T00:00:00.000Z'
    > new Date('2023-01-01T00:00:00+09:00').toISOString() // +09:00指定
    '2022-12-31T15:00:00.000Z'
    
  • getTimezoneOffset() が返すUTCオフセット(分単位の整数)は、ISO 8601のUTCオフセット表記とは正負が逆になる。例えば日本標準時(+09:00)の場合 -540 となる。

    > new Date().getTimezoneOffset()
    -540
    
  • Dateオブジェクトの時刻情報アクセスメソッドには、UTCベースの getUTCXxx(), setUTCXxx() と、タイムゾーンを考慮したローカルタイムベースの getXxx(), setXxx() がある。

  • getDate() は day of month (0 - 31) を返す。 getDay() は曜日(0=Sun - 6=Sat)を返す。

型変換

  • Date -> number 変換: Date.prototype.valueOf() または、Date.prototype.getTime()

    > new Date('2023-01-01T00:00:00.000Z').valueOf()
    1672531200000
    
  • number -> Date 変換: new Date(number)

    > new Date(1672531200000)
    2023-01-01T00:00:00.000Z
    
  • Date -> string 変換: Date.prototype.toISOString()

    > new Date(1672531200000).toISOString()
    '2023-01-01T00:00:00.000Z'
    
  • string -> Date 変換: new Date(string)

    > new Date('2023-01-01T00:00:00.000Z')
    2023-01-01T00:00:00.000Z
    
1
1
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?