可能是一个愚蠢的问题,但我需要找到答案。我们正在编写的应用程序需要处理遥远的过去和未来日期,我认为将我们的日期处理为 64 位 Unix 时间戳将是一个简单的解决方案,只要我正确理解PHP 手册,其中指出最大 int 值取决于平台并且始终有符号。因此,x64 平台应支持 2^63 位,而 x86 平台应支持 2^31 最大位。
基本上,该应用程序仅处理整数时间戳,以使我们相当复杂的算法稍微“简单”一些。然而,对于我们当前的 x86 版本,尝试处理遥远的过去或未来时间戳值会导致 PHP 中任何大于 +/- 2^31 的值出现预期溢出。我的解决方案是简单地使用免费的 Visual C++ Studio 下载来编译 x64 PHP 版本,但在深入研究之前,我想知道我的假设是否正确 - “Windows x64 PHP 版本将正确处理 64 位 int 值,并且正确地将 Windows 'ticks' 转换为 64 位 Unix 时间戳,以实现其本机日期/时间功能,就像 x86 构建一样。”
例如:
echo mktime(0, 0, 0, 12, 31, 2055);
Run Code Online (Sandbox Code Playgroud)
将返回正确的时间戳,而不是false。
同样的情况也适用于 MYSQL 时间戳。例如:
SELECT UNIX_TIMESTAMP('2065-11-30 10:30:19');
Run Code Online (Sandbox Code Playgroud)
将返回正确的值,而不是像我们当前运行的 x86 版本那样返回“0” 。
-我希望我不要太含糊。提前致谢。我们只是一群科学极客,而不是真正的程序员,正在努力解决这个“琐碎”的问题。
有趣的问题:我不久前尝试运行一些测试,期望完整的 64 位时间戳为我提供大爆炸和太阳燃烧之间的日期范围,但发现仍然只有较低的 32 位正在处理。传递给 date() 函数,即使回显时间戳整数值显示完整的 64 位范围。
编辑
但是,使用 64 位范围的值设置 dateTime 对象是没有问题的。
| 归档时间: |
|
| 查看次数: |
1152 次 |
| 最近记录: |