8

想知道我是否应该删除通常存储的时间数据。我们正在使用postgres以及node.js从我们的 API 返回 DateTime 的位置:

2013-07-01T00:00:00.000Z

然而,由于这个字段应该只代表一个日期,我觉得像这样在返回之前重新格式化会更清楚地表明时间是不相关的:

2013-07-01

想法?

4

2 回答 2

6

如果您代表日历日期,则没有时间或时区。简短的表示更有意义。

不幸的是,许多 javascript 实现中的 new Date(string) 会对你做坏事

new Date('2015-09-23')
Tue Sep 22 2015 20:00:00 GMT-0400 (Eastern Daylight Time)

解决问题的最简单方法是不使用 javascript 的 Date - 这种类型与其他语言中的 DateTimeOffset 匹配。这是表示日历日期值的不好方法。

但是,无论如何,您可能会使用 javascript 的 Date 。下一个最简单的“修复”是避免标准表示(因为标准表示被解释为带有 UTC 的 DateTimeOffset)。这里有两种可能性:

使用“/”代替“-”。

new Date('2015/09/23')
Wed Sep 23 2015 00:00:00 GMT-0400 (Eastern Daylight Time)

使用 3 位数的月份 - 前导零将被丢弃。

new Date('2015-009-23')
Wed Sep 23 2015 00:00:00 GMT-0400 (Eastern Daylight Time)

如果您在客户端和服务器端都有 javascript,那么您就完成了。如果您在服务器端有其他东西,您应该考虑服务器语言在看到非标准日期格式进入时会做什么。

于 2015-09-23T14:21:28.177 回答
1

作为 API 用户,我更愿意接收长格式的日期。

有几个原因:

  1. 时区:长格式实际上有一个内置的时区。这很重要。
  2. 解析:大多数语言都能够将这种长格式读取为原生“日期”对象。在 C# 和 Java 等某些语言中,需要强制该短日期使用正确的时区。您还可以避免月/日与长格式的混淆。
  3. 比较:如果用户短时间内通过,您的 API 是否能够正确处理?一个好的 API 需要看起来一样的进出。
于 2013-07-11T22:42:51.887 回答