在 PHP 中有什么方法能获取自 0001 年以来经过的秒数?

2017-08-13 01:43:06 +08:00
 lslqtz
具体是 0001 年 1 月 1 日 00:00:00 来经过的秒数...
用其它函数好像都会有误差,有没有什么合适的方法来获取...
3738 次点击
所在节点    问与答
39 条回复
lslqtz
2017-08-13 04:57:48 +08:00
@konakona 我试了试,和我这段代码没有区别...
Valyrian
2017-08-13 05:01:14 +08:00
两个时间戳减一下不就行了吗???
lslqtz
2017-08-13 05:02:08 +08:00
@msg7086 具体的计算思路是怎样的能讲讲不~ 说实话没看懂这算法...
lzhr
2017-08-13 05:03:36 +08:00
SECONDS_PER_DAY, 86400
DAYS_FROM_0_TO_1970, 719528

好像没有零年
lslqtz
2017-08-13 05:14:02 +08:00
重新改了下函数,在 C#中得出的结果和 PHP 中 strtotime 里面的结果完全一样。
我在 C#中用这段代码来测...
Console.WriteLine(new DateTime(633979008000000000, DateTimeKind.Utc));
在 PHP 中用这段代码来生成...
<?php
date_default_timezone_set('UTC');
function years_to_seconds($year) {
return 31536000*($year-1)+(floor($year/4)-floor($year/100)+floor($year/400)-floor($year/3200))*86400;
}
$seconds=years_to_seconds(1970) + strtotime('2010-01-01 00:00:00');
$seconds*=10000000;
echo number_format($seconds,0,'','');
?>
chenqh
2017-08-13 05:17:48 +08:00
用现在的时间戳减去 01 年的时间戳不就好了吗
chenqh
2017-08-13 05:19:17 +08:00
看错了忽略我吧
msg7086
2017-08-13 05:37:50 +08:00
@lslqtz 1969 也是算到 1969 的年底啊,当然是 $i <= $year 咯。你要用$i < $year 的话要填 1970。
思路的话你自己想想嘛。找出 20 以内 3 的倍数的个数,你怎么算的来着。

@konakona 你说啥?
lslqtz
2017-08-13 05:40:02 +08:00
@msg7086 反正代码是拿来用的...没问题就行了,炸了再改(
suman
2017-08-13 07:33:29 +08:00
1582 年 10 月 5 日~14 日是不存在的,楼主记得排除掉。
GreatHumorist
2017-08-13 07:40:55 +08:00
把 1970 年前的算出来做成常数,每次加时间戳不就行了?复杂度 O(1)
yksoft1
2017-08-13 09:30:42 +08:00
@suman 在东正教地区是存在的,俄国到十月革命之后才使用格里高利历。
mrcn
2017-08-13 11:14:23 +08:00
0001 年到 1970 年的秒数是固定的对吧,然后再加上时间戳呢。
lslqtz
2017-08-13 15:47:18 +08:00
@mrcn 是固定的
所以算出来就可以单独用了
lslqtz
2017-08-13 15:48:06 +08:00
@GreatHumorist 按这么说 性能还真不重要…
geelaw
2017-08-13 16:53:19 +08:00
这楼里面怎么这么多发明历法的?

不要尝试这种无意义的问题
mrcn
2017-08-13 16:54:01 +08:00
@lslqtz 所以可以纸笔用数学方法直接算出,保存为常量
lslqtz
2017-08-13 18:12:08 +08:00
@geelaw 能解决问题的方法就是有意义的。
@mrcn 用代码算可能更快一点...
geelaw
2017-08-13 20:22:35 +08:00
@lslqtz 那你没看懂我的意思,我的意思是问题本身是无意义的,更术语的说法是你的问题不是 well-formed/well-asked/well-defined.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/382535

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX