【问题标题】:jQuery datepicker + Rails 3.2.8 + AngularJS: show and persist date issuejQuery datepicker + Rails 3.2.8 + AngularJS:显示和保留日期问题
【发布时间】:2012-09-17 06:06:49
【问题描述】:

我很难让三合会 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”

现在,当我将表单提交到后端时,一切都搞砸了,因为 rails 收到了 由 datepicker 格式化的 "inizio" 的新值。数据库字段只是一个 Date 使得有关时间的信息消失了,剩下的只是持久化到模型中的(错误的)日期。

我知道 datepicker 具有本地化选项,但我找不到任何与时区相关的内容,我可以更改以修复这种不需要的行为。

我以为我可以使用后端模型上的属性来解析来自 UI 的信息,但我不喜欢这种方法。

在处理所有这些问题时要遵循的最佳做法是什么?

我在 StackOverflow 上遇到过类似的问题,但运气不好。

提前感谢您的帮助。

【问题讨论】:

  • 经过几个小时的挣扎,我终于解开了谜团。当然,这是我的一个错误,“ui-date 指令存储并期望模型值是标准的 javascript Date 对象”完全从我的视线中消失了。我将日期字段作为字符串传递。
  • 那么你做了什么来确保这些字段是日期而不是字符串?
  • 我只是在我的 angularjs 服务中拦截了来自后端的成功响应,并将字符串表示替换为 Date 实例。

标签: jquery ruby-on-rails json datepicker angularjs


【解决方案1】:

一旦这个拉取请求进入核心,它应该会更容易,因为资源将支持一个解码器,可以在其中完成这个字符串到日期的转换。 https://github.com/angular/angular.js/pull/1514

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 2015-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多