5

トライアド rails+angularjs+jQuery datepicker を連携させるのに苦労しています。

最初の問題は、バックエンドから取得した日付を表示することです。UI がバックエンドからデータを要求すると、ある時点で、JSON 表記で次のものを受け取ります。

{"id":1,"ragione_sociale":"FrigoCaserta srl","indirizzo":"Strada provinciale Gricignano d'Aversa","cap":"81030","citta":"Gricignano d'Aversa","provincia":"CE","partita_iva":"1234","codice_fiscale":null,"tipo_contratto":"Orario","costo":"0.0","inizio":"2012-05-01","fine":"2013-09-22","$$hashKey":"005"}

関連するフィールドは「inizio」と「fine」です (それぞれ開始日と終了日)。

Rails のタイムゾーンはヨーロッパ/ローマに設定されています。

Datepicker のオプションは次のように設定されています: {dateFormat: 'dd/mm/yy'}

したがって、入力フィールドに「inizio」の日付が 01/05/2012 と表示されることを期待していましたが、代わりに、24/03/2018 が返されました。

dateFormat オプションを 'yy-mm-dd' に変更すると、正しい日付が表示されますが、不要な区切り記号と形式 (2012-05-01) が表示されます ...

ただし、舞台裏では、表示されたオブジェクトが多少操作され、次のようになります。

{"id":1,"ragione_sociale":"FrigoCaserta srl","indirizzo":"Strada provinciale Gricignano d'Aversa","cap":"81030","citta":"Gricignano d'Aversa","provincia":"CE","partita_iva":"1234","codice_fiscale":null,"tipo_contratto":"Orario","costo":"0.0","inizio":"2012-04-30T22:00:00.000Z", ...

「inizio」フィールドが「2012-05-01」から「2012-04-30T22:00:00.000Z」に変換されていることに注意してください。

さて、フォームをバックエンドに送信すると、レールは日付ピッカーによってフォーマットされた「inizio」の新しい値を受け取るため、すべてがうまくいきます。データベース フィールドが単なる日付であるため、時間に関する情報が失われ、残っているのはモデルに保持されている (間違った) 日付だけです。

datepicker にはローカライズ オプションがあることは承知していますが、この望ましくない動作を修正するために変更できるタイムゾーン関連は見つかりません。

バックエンドのモデルで属性を使用して、UI からの情報を解析できると考えましたが、このアプローチは好きではありません。

これらすべてに対処する際に従うべきベストプラクティスは何ですか?

私は、運が悪くても StackOverflow の同様の質問を経験しました。

よろしくお願いします。

4

1 に答える 1

0

このプル リクエストがコアに組み込まれると、リソースがこの文字列から日付への変換を実行できるデコーダーをサポートするため、より簡単になります。 https://github.com/angular/angular.js/pull/1514

于 2012-12-20T22:58:54.830 に答える