【问题标题】:Persist Angular UI Bootstrap Datepicker as string to API将 Angular UI Bootstrap Datepicker 作为字符串保存到 API
【发布时间】:2015-05-11 18:38:20
【问题描述】:

我正在使用 angular-ui-datepicker 弹出窗口,并尝试将保存的日期值作为仅包含日期的字符串保存。 M/d/yyyy

日期选择后输入正确5/11/2015但存储的值是Date

Mon May 11 2015 00:00:00 GMT-0400 (Eastern Daylight Time) 12:00AM

有没有办法将值始终存储为日期 string 而不是 Date 对象?

<p class="input-group">
    <input type="text" datepicker-popup="M/d/yyyy" ng-model="event.date"
        is-open="datePickers['date']" class="form-control" />
    <span class="input-group-btn">
        <button type="button" class="btn btn-default"
            ng-click="toggleDatepicker('date', $event)">
            <i class="fa fa-calendar"></i>
        </button>
    </span>
</p>

在上述情况下,我需要数据始终是日期字符串,例如:

{
   date: '5/11/2015'
}

而不是

{
   date: `Mon May 11 2015 00:00:00 GMT-0400 (Eastern Daylight Time) 12:00AM`
}

【问题讨论】:

  • 我会做一个自定义指令并利用 ngModel $formatter 将 $modelValue 设置为等于 $viewValue 但不做 $render。未经测试,但这是我会尝试的。请参阅此 SO 问题/答案:stackoverflow.com/questions/27491300/…
  • 嗯,我需要更多地研究 Angular 指令来实现这一点。在不影响其呈现方式的情况下操纵模型的指令的任何示例?
  • 检查我编辑的评论中的问题...

标签: angularjs asp.net-web-api json.net angular-ui-bootstrap angular-ui-datepicker


【解决方案1】:

我不认为有一个简单的(标准)JavaScript 日期格式化函数,但我想您总是可以自己构建 M/d/yyyy 字符串,例如:

getDate() // Returns the date
getMonth() // Returns the month
getFullYear() // Returns the year

(more here)

我自己也在各种项目中对此有所了解,您可能需要考虑Date.toISOString。我发现 Angular 会自动将 JSON 中的 ISO 8601 字符串反序列化为实际的 Date 对象以供进一步使用,反之亦然,它还会透明地将日期对象序列化为这种格式,因此您不必自己担心。

【讨论】:

  • 我知道如何格式化日期,但我正在尝试使用 Angular UI Datepicker 自动执行此操作
  • @hunter 对不起,我明白我不清楚,但这就是我在帖子后半部分的内容。我发现当使用 Date 对象作为模型值时,一切都很好,所以你只需要担心将它作为字符串持久化。这取决于持久化的含义,但如果您使用 $http 从服务器存储/加载,它会自动转换为 ISO8601 字符串/从 ISO8601 字符串转换。因此,如果您可以使用 Date 对象作为模型(这似乎是 angular-ui-datepicker 首先需要的),那么一切都应该已经自动完成了。
猜你喜欢
  • 2016-02-11
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多