获取明天凌晨的时间戳
在一些业务逻辑中,需要在今天获取明天凌晨的时间戳。在网上找了一下别人的写法是这样的
echo strtotime(date('Y-m-d',strtotime('+1 day')));
这样的写法是比较保守的做法,阅读起来是先将今天时间戳加一天,然后取年月日,然后转时间戳。
我提出了一种稍微改进的做法
echo strtotime(date("Y-m-d"))+86400;
这样能少调用一次函数实现加一天,毕竟一天的常规情况下是有86400秒的。tips:我记得有一次出现了一分钟61秒的情况 这种情况应该可以忽略。
补充:
世界上有两种时间计量系统:基于地球自转得出的“世界时”和基于原子振荡周期确定的“原子时”。由于两种时间尺度对秒的测量方法不同,随着时间推移,两个时间系统间会出现差异,因此有了“协调世界时”的概念。
“协调世界时”以“原子时”秒长为基础,在时刻上尽量接近“世界时”。1972年,国际计量大会决定,当“世界时”与“原子时”的时刻相差达到0.9秒时,就在“协调世界时”上加上或减去1秒(正闰秒或负闰秒),以尽量接近“世界时”,这就是闰秒。
中国天文学会会员、天津市天文学会理事史志成表示,闰秒一般安排在年中或年末的最后时刻,即6月30日或12月31日的最后一分钟。从1972年到这次的44年间,已经有27次闰秒。最近一次是2015年6月30日。增加闰秒的决定通常提前6个月宣布。
出自 http://www.oushinet.com/international/guojinews/20161231/251172.html
言归正传,我发现我们总是必须要获取年月日Ymd的格式才能取到凌晨,那么如何不调用date函数获取凌晨呢?
这里我想到了余数概念,当时间戳对86400取余的时候不就能得到今天过了多少秒了吗?只要减掉这个时间,再加上一天,就可以获取明天凌晨时间了(东八区还需要减8个小时)
代码如下
$now=time();
echo $now-$now%86400+86400-8*3600;//东八区需要减八小时
下面是代码的执行效率对比
网上提供的方式
执行时间
我提出的方式
执行时间
余数改进方式
执行时间
如此看来,尽量避免函数的调用是能够提升效率的一个可以尝试的手段