- + JavaScript の質問用スレッド vol.118 + [転載禁止]©2ch.net
794 :デフォルトの名無しさん[sage]:2016/02/10(水) 10:43:55.73 ID:KVydSgEF - データベースのテーブルで「Date」型を使ってまして
2014-11-15 などと値が入ってます これ、JavaScriptに渡ると 2014-11-15T00:00:00.000Z UTC形式になっちゃうわけですよ。表示はまだいい。 HTML5のDateでもAngular bootstrap UIのDatePickerでも 2014-11-10 と変えてデータベースに書き込むと、そのときの書き込む値は 2014-11-09T15:00:00.000Z と日本ローカルタイム2014-11-10 0:00をUTC変換した値になり データベースには「2014-11-09」が書き込まれてしまう 想定した「2014-11-10」が書けないんですわwww ぼすけてwww スマートな解決求むorz
|
- + JavaScript の質問用スレッド vol.118 + [転載禁止]©2ch.net
795 :794[sage]:2016/02/10(水) 11:35:08.49 ID:KVydSgEF - getTimezoneOffset()
は使いましたが、検索の開始日付けに使う →検索実行時に、日本なら-(-540分)する。おkおk →複数回検索すると、日付けが9時間ずつズレていく という失敗しています
|
- + JavaScript の質問用スレッド vol.118 + [転載禁止]©2ch.net
797 :794[sage]:2016/02/10(水) 12:15:44.12 ID:KVydSgEF - >>796
DBはPostgreSQL、他にも使われてるのでtimestamptz型への変更は無理です 根本的に、JavaScriptのDate型はUTC秒数であって日付けじゃないのが原因なわけですが 書き込み一回だけ使うならば getTimezoneOffset = -540 (日本) を使い、 表示2014-11-10 内部2014-11-09T15:00:00Z - (-540) = 2014-11-10T00:00:00Z として書き込めば出来ます しかしDOMで持ってる値を操作してしまうと、すでに操作済みなのかまだ操作してないのかも管理しないといけない (画面によっては複数回生きてるものがある、検索用とか) 文字列に変換してサーバ側に渡すのはコントローラのコードが煩雑過ぎる どうするんや!となってます
|
- + JavaScript の質問用スレッド vol.118 + [転載禁止]©2ch.net
801 :794[sage]:2016/02/10(水) 14:03:06.19 ID:KVydSgEF - >>798
読みはAngularで、 $scope.oneOrder = ServiceOrders.get({ repairID: selectedID }); とか。修理オーダーに受付日付などが入っておるわけで 書き込みもAngularで、 dt = $scope.oneOrder.AcceptedDate; dt.setMinutes(dt.getMinutes() - dt.getTimezoneOffset()); ServiceOrders.update($scope.oneOrder, $scope.onrefresh); //複数回使うなら以下も必要 dt.setMinutes(dt.getMinutes() + dt.getTimezoneOffset()); ServiceOrdersはAngularの$resource(AJAX)で、JSON REST APIです getで返って来るのはもちろん文字列で、 "AcceptedDate": "2014/11/15", DBにもこう入ってます 日付が出てくるたんびにマイナスしてプラスして、はダサ過ぎると思うわけですよ 799さんの言うように文字列で扱う専用のディレクティブ作るしかないんやろか
|