新規投稿
フォローする

サーバ取得時間から日時フィールドへの登録について

お世話になります。

タイムカードの活用をしようと

https://developer.cybozu.io/hc/ja/articles/202181714

を利用しようと思うのですが、日本時間8時台に処理を実行した場合、

時間が32時となってしまい正しく9時をすぎないと打刻できません。

どのように対処すればよいか、アドバイスいただけないでしょうか。

よろしくお願いいたします。

 

0

4件のコメント

Avatar
しぶい

青山昌司 さん

各関数の処理で、時間部分を getUTCHours() + 9 で時間を算出してますね。
全処理の UTC と +9 消して getHours() のみで恐らく影響でないと思います。

サーバーから時間をとって、そのあと Date() 型にしてるんで UTC にする必要も、+9 もする必要ないはずなのですが、その処理のせいで影響が出てます。

ついでに、明確にずれるのは 日 だけだと思いますが、ほかの日時の値も UTC の部分消しておいてください。

0
Avatar
青山昌司

しぶい様

 

お世話になります。

無事表示が正しくなりました。

ありがとうございました。

UTC と +9 を削除しましたが、「getMonth() + 1, 2);」のとこは「+1」を残し、

+ ':00+09:00'」は削除しましたがこちらも問題ありませんでしょうか?

何卒ご教授の程よろしくお願いいたします。

 

 

 

 

 

0
Avatar
しぶい

青山昌司 さん

はい、そこは +1 があっても問題はありません。

JS の仕様の話でややこしいのですが、getMonth() は、取得する月 - 1 が返り値として返されます。
わかりやすく言うと 1月に取得した場合、返り値は 0 になり、12月に取得した場合、返り値は 11 になります。

今回の処理の場合は、サーバーから取得した値を Date型に変換していますが、変換した結果から取得しても上記の動作は同じです。
現時点(4月)での話なら、サーバーから取得できる値は確かに 4月なのですが、Date型に変換した時点で getMonth() の値は 3 になります。

そのため getMonth() で当月を求めるときは返り値に +1 を行います。

0
Avatar
青山昌司

しぶい様

 

お世話になります。

なるほど大変勉強になります。

お付き合いいただきありがとうございました。

今後ともよろしくお願いいたします

0
サインインしてコメントを残してください。