UTC时间以小时为单位(自01/01/0001 00:00:00起)

时间:2013-01-14 23:31:43

标签: php time epoch

我正在尝试与第三方服务集成,该服务想知道已经过了多少“UTC时间(从01/01/0001 00:00:00开始)”。

什么是勾?

假设它是第二个(我不知道它是)......自01/01/0001 00:00:00以后我该怎么办呢?这比32位整数大。不确定它是否大于64位整数,但PHP的date()函数返回32位整数 - 而不是64位整数。

如果我知道在01/01/0001 00:00:00和UNIX纪元之间经过了多少秒,我可以使用bcmath或gmp将该数量(作为常量)添加到time()(再次假设滴答是秒)但我不知道这个数字会是什么。

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

我希望用.NET编写的服务作为.NET框架知道DateTime.Ticks。 documentation说了一个勾号:

  

单个刻度表示一百纳秒或一百万分之一秒。一毫秒内有10,000个滴答。

     

此属性的值表示自0001年1月1日午夜12:00:00起经过的100纳秒间隔的数量,表示DateTime.MinValue。它不包括可归因于闰秒的刻度数。

因此,从01/01/0001 00:00:00到10.000.000,您将需要多秒。

我找到了值:

621,355,968,000,000,000

表示此SO post中01-01-0001T00:00:00至01-01-1970的刻度线。我不知道它是如何计算的。我假设.NET框架将输出它。我建议验证该值,并在PHP中将其声明为常量。

PHP的int类型是有符号整数。它的大小取决于您使用的系统。如果它是64位系统,则值范围应足够大以达到此目的。如果不是,您可以使用GMP extensionBC Math扩展程序来处理大数字。

答案 1 :(得分:1)

“ticks”没有标准定义。可以表示秒,50,60或100秒,毫秒或任何数量的其他细分。您需要向服务提供商询问详细信息。

如果他们想要从第1年开始计算,那就引发了各种其他棘手的问题,因为公历(我们现在使用的那个)直到1582年才被引入! (UTC的标准直到1961年才被标准化。)服务提供商可能会也可能不会考虑日历变更。

检查所有这一切的一种简单方法是询问他们现在(或其他近期参考日期)对应的值是什么。

答案 2 :(得分:-2)

Unix时间是自1970年1月1日以来经过的秒数。当然,您可以使用特殊库(如bcmath)添加时间戳。 unix时间比UTC时间晚1970年,因此常数将为1970 * 365 * 24 * 60 * 60秒。