We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
node_moduleとしてインストール
// main.js var holiday_jp = require("@holiday-jp/holiday_jp"); // "Asia/Tokyo"(+0900) 以外のタイムゾーンで実行すると結果が変化する場合がある // process.env.TZ = "Asia/Tokyo"; // 元旦 var date = new Date("2022-01-01T00:00:00+0900"); console.log(date.toString()); console.log(holiday_jp.isHoliday(date)); // expected true; console.log(holiday_jp.between(date, date)); // expected not-empty list
node main.js
codesandbox
sandboxの設定やprocess.env.TZの値を変化させ異なるタイムゾーンで実行します
process.env.TZ
予期した通りの結果が得られました
Sat Jan 01 2022 00:00:00 GMT+0900 (Japan Standard Time) true [ { date: 2022-01-01T00:00:00.000Z, week: '土', week_en: 'Saturday', name: '元日', name_en: "New Year's Day" } ]
結果が変わります
Fri Dec 31 2021 15:00:00 GMT+0000 (Coordinated Universal Time) false []
こちらは意図した動作でしょうか?
"YYYY-MM-DD"の文字列表現に変換する関数format内部で、タイムゾーンに影響される関数 Date#get**をそのまま利用しているのが原因そうです。
format
Date#get**
holiday_jp-js/lib/format.js
Lines 2 to 4 in f906950
The text was updated successfully, but these errors were encountered:
結論としては意図した動作になります。
holiday-jp は YAMLの日付の文字列を使って祝日を管理しています。つまりタイムゾーンはありません。
また、ベースとなるライブラリは https://github.com/holiday-jp/holiday_jp-ruby です。こちらをみると to_date を使っています。
https://github.com/holiday-jp/holiday_jp-ruby/blob/ef8f0370b1119dca348f8dc19ec0a7154f500d26/lib/holiday_jp/holidays.rb#L21-L29
to_dateメソッドの挙動はタイムゾーンによって出力が変化します
$ irb irb(main):001:0> require 'time' => true irb(main):002:0> Time.new('2023', '01', '01').to_date => #<Date: 2023-01-01 ((2459946j,0s,0n),+0s,2299161j)> irb(main):003:0> Time.new('2023', '01', '01').utc.to_date => #<Date: 2022-12-31 ((2459945j,0s,0n),+0s,2299161j)> irb(main):004:0>
つまりタイムゾーンは関係なく日付の文字列だけで判定しています。
Sorry, something went wrong.
No branches or pull requests
状況の再現方法
node_moduleとしてインストール
codesandbox
実行結果
sandboxの設定や
process.env.TZ
の値を変化させ異なるタイムゾーンで実行しますAsia/Tokyo +0900
予期した通りの結果が得られました
UTC +0000
結果が変わります
Fri Dec 31 2021 15:00:00 GMT+0000 (Coordinated Universal Time) false []
質問
こちらは意図した動作でしょうか?
"YYYY-MM-DD"の文字列表現に変換する関数
format
内部で、タイムゾーンに影響される関数Date#get**
をそのまま利用しているのが原因そうです。holiday_jp-js/lib/format.js
Lines 2 to 4 in f906950
The text was updated successfully, but these errors were encountered: