-1

我试图将时间存储为 2013 年 1 月 1 日与我将其保存在数据库中的那一刻之间的差异。它绝对小于相对于 1970 年的标准;)无论是在存储中还是因为我将其发送到客户端。

因为我要做很多 getRelativeTime(),所以我正在寻找简单性。我可能会将其从 2013 年 1 月 1 日更改为服务器启动日期,即 2013 年 1 月 1 日:D

我在 GMT 中保持客户端和服务器端跟踪,它位于 nodejs 服务器上,服务器未知。根据我的研究,有一些解决方案,但由于这个和那个,许多人称它们不正确:|

4

2 回答 2

2

要为您的问题提供有效答案:

var ms = new Date() - Date.UTC(2013,0,1);

但请要这样做。

  • 您最终会混淆使用您系统的任何人(开发人员、api 客户端、数据库人员等)

  • 你不会像你想象的那样节省多少字节。JavaScriptNumber类型在内存中始终为 64 位(8 字节),请参见此处。你可能在数据库中保存多少取决于你的数据库平台,但例如 MySQLDATETIME类型需要 8 个字节,而TIMESTAMP类型只需要 4 个。a 的范围TIMESTAMP要小得多,参考这里这里

  • 如果您的应用使用您的纪元之前的日期,您可能会经常遇到负数。它们会起作用,但它们可能会造成混乱。如果有人不知道您调整的时代,他们可能会产生一个看起来有效的日期,但应该意味着不同的东西。

  • 您还将放弃使用许多期望日期以某种方式工作的优秀库的任何潜力。您可以将自定义日期转换为标准日期,但您真的想要不断地包装和打开这些值吗?可能不是。即使是像moment.js这样使用自己的类型的库,也可以通过扩展或封装标准数据类型来做到这一点。兼容性比字节空间更受关注。

JavaScript 日期有很多问题,但选择 1/1/1970 作为纪元是件好事。仅仅因为您可以做某事,并不意味着您应该做某事。

此外,考虑到磁盘空间通常是运行应用程序成本最低的组件。即使有数百万条记录,您最多也可能节省几十兆字节。让我们在偏高的情况下犯错,并说您通过这个巧妙的技巧节省了 200 MB。Amazon 的顶级预置 IOPS 云存储为每月每 GB 0.125 美元。恭喜,您全年节省了 7.68 美元。

于 2013-05-14T19:48:32.100 回答
0

您正在尝试标准化纪元时间的值吗?这样的纪元时间以正整数值给出。不是吗?1356998400 是您要规范化的数据量。

于 2013-05-14T19:41:40.830 回答