Heim  >  Artikel  >  Backend-Entwicklung  >  time - PHP距离某时间倒计时,存在误差,怎么解决???

time - PHP距离某时间倒计时,存在误差,怎么解决???

WBOY
WBOYOriginal
2016-08-18 09:15:431139Durchsuche

<code><?php /**
 * Created by coder meng.
 * User: coder meng
 * Date: 2016/8/16 16:39
 */
$now=time();
echo '<br>';
$end=strtotime('2018-8-16 00:00:00');
$d=$end-$now;
$y=floor($d/3600/24/30/12);
$m=($d/3600/24/30)%12;
$dt=($d/3600/24)%30;
echo "距世界杯还有{$y}年{$m}个月{$dt}天";
</code>

这样写 年 月 会存在误差,应该怎么写?
这样的误差有影响吗?

回复内容:

<code><?php /**
 * Created by coder meng.
 * User: coder meng
 * Date: 2016/8/16 16:39
 */
$now=time();
echo '<br>';
$end=strtotime('2018-8-16 00:00:00');
$d=$end-$now;
$y=floor($d/3600/24/30/12);
$m=($d/3600/24/30)%12;
$dt=($d/3600/24)%30;
echo "距世界杯还有{$y}年{$m}个月{$dt}天";
</code>

这样写 年 月 会存在误差,应该怎么写?
这样的误差有影响吗?

用DateTime可以非常方便快捷地计算出两个日期的diff.

<code class="php">
<?php $datetime1 = new DateTime();
$datetime2 = new DateTime('2018-08-16');
$interval = $datetime1->diff($datetime2);
list($y, $m, $d) = explode('-', $interval->format('%Y-%m-%d'));

echo "距世界杯还有{$y}年{$m}个月{$d}天";</code>

关键是逻辑不清楚,2月1号到3月1号究竟是一个月还是28(29)天?

有个歪的方法是还拿差值当日期解析,和1970-1-1比较

<code class="php"><?php $now=time();
$end=strtotime('2018-8-16 00:00:00');
$d=$end-$now;

$y = date('Y', $d) - 1970;
$m = date('n', $d) - 1;
$d = date('j', $d) - 1;

printf('还有%d年%d月%d天', $y, $m, $d);</code></code>

https://3v4l.org/1QEbC

为什么用 time()
怎么不去当天凌晨?

<code>$y=floor($d/3600/24/30/12); //这个年有点牵强,有些月份不止30天呢。</code>

如果你的機器時間誤差不大,應該不會有多大誤差啊

<code>$dt=($d/3600/24)%30;

这句也有问题吧.</code>

关于时间的话,可以使用Carbon这个第三方库库来进行快捷计算。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn