ご利用中のSmartDBで下記の事象が発生しています。
ご不便、ご迷惑をおかけして申し訳ございません。
記事公開日:2023/04/05
発生日時
- サービス開始当初より
事象
2つの日付を営業日基準の差分を返す関数 dateDiffInWorkDays(日付1,日付2)において下記の事象を確認しています。
いずれも適切な動作ではないと考えているため、それぞれ対応を計画しています。
事象1:結果がマイナスとなる場合に差分が正しく計算されない場合がある
dateDiffInWorkDays(日付1,日付2)の形式で指定する際、日付1と日付2を入れ替えても正負が逆転するだけで絶対値は変わらないはずですが、特定の条件で絶対値が一致しません。
事象の発生例
- dateDiffInWorkDays("2023/04/03","2023/04/05") → 3
- dateDiffInWorkDays("2023/04/05","2023/04/03") → -1
事象2:dateDiffInWorkDaysの結果に開始日を含んでしまう
dateDiffInWorkDaysは"差分"を求める関数ですが、日付1が営業日である場合は日付1を含んだ日数で計算されます。
事象の発生例
- dateDiffInWorkDays("2023/04/03","2023/04/05") → 3
- dateDiffInWorkDays("2023/04/02","2023/04/04") → 2
※2023/04/02が日曜日のため、営業日ではない。
影響範囲
本事象はdateDiffInWorkDaysを計算するときに発生します。
回避策
事象1
日付2が日付1よりも未来の日付となるように利用してください。
事象2
回避策はありません。
対応
事象1
不具合として、2023年4月21日(金)のリリースにて修正予定です。
事象2
既存の"dateDiffInWorkDays"の動作を修正するとともに、非推奨とし、新たに"countWorkDays"を追加して、そちらに移行していただけるように対応します。
これらの対応は2023年4月21日(金)のリリースにて実施予定です。
dateDiffInWorkDaysの仕様変更
日付1を含めた日数で計算する動作は仕様不具合として、修正後は期間中にある営業日と営業日の間が1とカウントするように修正ます。
※結果として、期間中の営業日数より1つ少ない数が結果として出力されるようになります。
この修正により既存の定義でも結果が変更となります。ご利用中の場合にはご注意ください。
例えば、2023年4月7日(金)〜2023年4月8日(土)は一方が営業日ではないので"0"になります。
※上記は修正前は"1"になっていました。
countWorkDaysの追加
営業日をカウントする機能は別途、"countWorkDays"という新しい関数を追加予定です。
"countWorkDays"は、開始日、終了日を含めた営業日の日数をカウントして数値で返す評価式を予定しています。
同時に、dateDiffInWorkDaysは関数一覧から削除し、新規には追加設定されにくい状態とします。
原因
事象1
実装時の考慮不足でありテストパターン不足により検出できていませんでした。
事象2
当初の機能設計において、既存機能(dateDiffInDays)の拡張として設計して実装しましたが、当初の検討が不十分のまま実装していました。
そもそもの設計として「営業日の差分」自体が解釈にズレが起きやすく、機能として実装するのに不適切な概念でした。
そのため、countWorkDaysにて代替する形での対応を実施いたします。