Last active
March 2, 2020 15:03
-
-
Save masatomix/d0d00bceff0d46da38fc75a1872d20ed to your computer and use it in GitHub Desktop.
日付考慮コード。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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