タイムゾーン America/Los_Angeles
では、サマータイム終了日 2018/11/04 の 01:00:00 〜 01:59:59 が2度繰り返される。
Ruby の Time
は、午前1時台をサマータイム終了後として扱っている。
irb(main):001:0> ENV['TZ'] = 'America/Los_Angeles'
=> "America/Los_Angeles"
irb(main):002:0> Time.local(2018, 11, 4, 0, 59, 0)
=> 2018-11-04 00:59:00 -0700
irb(main):003:0> Time.local(2018, 11, 4, 0, 59, 0).dst?
=> true
irb(main):004:0> Time.local(2018, 11, 4, 1, 0, 0)
=> 2018-11-04 01:00:00 -0800
irb(main):005:0> Time.local(2018, 11, 4, 1, 0, 0).dst?
=> false
1 時になったタイミングで1時間飛ぶ。
irb(main):001:0> ENV['TZ'] = 'America/Los_Angeles'
=> "America/Los_Angeles"
irb(main):003:0> Time.local(2018, 11, 4, 0, 59, 59).to_i
=> 1541318399
irb(main):004:0> Time.local(2018, 11, 4, 1, 0, 0).to_i
=> 1541322000
irb(main):005:0> 1541322000 - 1541318399
=> 3601
PHP の strtotime
は、午前1時台をサマータイム中として扱っている。2時になったタイミングで1時間飛ぶ。
php > echo strtotime("2018-11-04 01:59:59 America/Los_Angeles");
1541321999
php > echo strtotime("2018-11-04 02:00:00 America/Los_Angeles");
1541325600
php > echo 1541325600 - 1541321999;
3601