作成日: 2022/08/26 最終更新日: 2022/10/26
文書種別
不具合
状況
修正済み
詳細
日付の文字列と日付値を計算した場合、SpreadJSではExcelと異なる値が返る場合があります。
例えば、A1セルに「2022-12-30」という文字列があり、B1セルに 2022/12/22 という日付値が設定されている場合に、「=A1-B1」を計算すると、Excelでは結果が10になりますが、SpreadJSでは10.375になります。また、A1セルに「2022/12/30」という文字列がある場合は、「=A1-B1」の計算結果はExcelと同様に10 が返ります。
これは、JavaScriptで文字列から日付値に変換した場合、「new Date("2022-12-30")」は「Fri Dec 30 2022 09:00:00 GMT+0900 (GMT+09:00)」となり、「new Date("2022/12/30")」の場合は「Fri Dec 30 2022 00:00:00 GMT+0900 (GMT+09:00) 」となるためです。
JavaScriptでは「2022-12-30」から日付値に変換した場合、標準時間と日本時間の時差分の9時間が追加された日付値に変換され、この結果が 0.375 の差分になります。
回避方法
SpreadJS (Ver.15.2.4)で修正済み。
Ver.15.2.4より前のバージョンでは、日付の文字列と日付値を計算するような場合は、次のいずれかの数式を用いて日付文字列を事前処理する方法があります。
(1) =IF(ISTEXT(A1),SUBSTITUTE(A1,"-","/"),A1)-IF(ISTEXT(B1),SUBSTITUTE(B1,"-","/"),B1)
(2) =IF(ISTEXT(A1),DATEVALUE(A1),A1)-IF(ISTEXT(B1),DATEVALUE(B1),B1)
上記の数式では、A1セルの値が "2022-12-30 12:00:00" という文字列で、B1セルが "2022/12/20"の日付値の場合、(1)は 10.5を返し、(2)は 10を返します。