0

我的应用程序需要 GET 参数中的日期范围。我在想一定有一些天才的方法将两个 Unix 时间戳编码为一个,有效地缩短 URL 参数。

我意识到两个时间戳的简单 CSV 可以解决问题,但这里的目标是尽可能减少 URL 大小。

PS:如果只有一个日期(开始日期),这也需要工作,在这种情况下,结束日期将被假定为今天。

4

2 回答 2

1

好吧,这里有一些想法:

  • 如果两个时间戳可能彼此接近,则将它们存储为一对第一次和差异。例如,现在和明天,您将存储1361666257,86400.

  • 以十六进制(基数 16)而不是基数 10 存储时间戳;例如,512960d1

  • 如果时间戳始终是日期,则将它们存储为自纪元以来的天数,而不是秒数,方法是除以 86400 并丢弃余数。例如,今天是第 15760 天。

和/或结合所有这三个:3d90,1

于 2013-02-24T00:40:50.417 回答
1

如果您的目标是尽可能减小 URL 大小,您可以提出自己的“时间戳”格式,在方便时选择粒度和偏移量。

例如,如果您需要传递的日期通常在请求的当前日期附近,并且如果您只需要日期而不是一天中的时间,则可以使用天数前,而不是自一年以来的秒数1970,这是 UNIX 时间戳定义。

这是使用 unix 时间戳和此变体的随机日期范围:

Date range: 2012-09-21 to 2013-01-10
Timestamp:  1348178400_1357772400
Days-ago:   156_45

请注意,我曾经将fromto_部分分开,因为使用 UNIX 时间戳时 1970 年之前的日期需要减号,或者在我的示例编码中的未来日期需要减号。-

这只是一个例子。您应该根据您的应用程序需求提出自己的编码(或不提出)。例如,如果日期范围通常很小,您可以将其编码为日期 + 差异。差异可能是几天、几个月或整年……取决于您的需要。

于 2013-02-24T00:46:05.560 回答