Skip to content

Instantly share code, notes, and snippets.

@masatomix
Last active March 2, 2020 15:03
Show Gist options
  • Select an option

  • Save masatomix/d0d00bceff0d46da38fc75a1872d20ed to your computer and use it in GitHub Desktop.

Select an option

Save masatomix/d0d00bceff0d46da38fc75a1872d20ed to your computer and use it in GitHub Desktop.
日付考慮コード。
const moment = require('moment-timezone')
// シンプルに
console.log(moment().format()) // 2020-02-13T10:47:10+09:00 (いま日本で10:47です)
console.log(new Date().toLocaleString()) // 2020-2-13 10:50:22 AM
// ってやると本番に行くと値が9時間ずれるよね、みたいな件。。
// 日付をあつかうには
// どのタイムゾーンの日付か(Timezone)
// どの言語で表示するか(Locale)
// がある。
// で、実行環境には "デフォルト" の「Timezone」と「Locale」があるので、
// new Date().toLocaleString() とか
// moment().format() などと
// TimezoneもLocaleも指定しないと、環境によって(Timezoneが異なるので)取得できる文字列が異なってしまう。。
// (逆に言うと、当たり前だけどDateオブジェクトはちゃんとTimezoneの概念があるってコトか)
// 以下テスト。
let date
date = moment('2019-03-25T10:10:59.999Z') // UTCで日付を明示的に設定
console.log(date.format()) // 2019-03-25T19:10:59+09:00
date = moment('2019-03-25T10:10:59.999') // デフォルトのTimezoneで日付を明示的に設定
console.log(date.format()) //2019-03-25T10:10:59+09:00
console.log(new Date('2020/03/02 22:45').toISOString()) // デフォルトのTimezoneを指定した見なされて、UTCのISO表記に変換される
console.log(new Date('2020-03-02T22:45Z').toISOString()) // UTC指定したと見なされて、そのままISO変換される
console.log(new Date('2020-03-02T22:45+09:00').toISOString()) // JST指定したと見なされて、9時間ずれでISO変換される
// 2020-03-02T13:45:00.000Z
// 2020-03-02T22:45:00.000Z
// 2020-03-02T13:45:00.000Z
// なので文字列を渡すときは、どのTimezoneでつくられた文字かをちゃんと合わせないと表示時にズレちゃいそう。
// console.log(moment.tz.guess()) // Timezoneは Asia/Tokyoでした。
// console.log(moment.locale()) // Localeはどうやら表示方法に関連するだけで、ズレたりはしなそうだ
// console.log(moment.locale('ja')) // Localeは変更可能。
// 結論いうと、その環境の日付でDate/momentを取得し、表示時にTimezoneを設定するのが良さそう。例
const now = moment() // UTCやJSTで作成された時刻を、tz('Asia/Tokyo')で TokyoのTimezoneの時刻に変換
console.log(now.tz('Asia/Tokyo').format('YYYY/MM/DD HH:mm'))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment