我一直在努力解决这个问题很长一段时间,在论坛上花了很长时间后,我想出了这段代码:
SELECT *, TIMESTAMPDIFF(SECOND,NOW(),`pay_date`) AS `expire` FROM `users`
pay_date
是日期时间字段,在尝试设置的那一刻(当前时间+7天)
所以NOW()正在显示03-09-2013 23:30:20; pay_date
显示10-09-2013 23:30:20。我正在使用此代码来提取倒计时:
echo $date['expire'];
它正在工作,它正确地给了我剩余的秒数,我不知道如何让它说出类似的东西:
2 years, 10 months, 20 days, 5 hours, 30 minutes, 46 seconds left
。
我已经尝试过几种方式,例如date('d-m-Y H:i:s', $date['expire'])
,但它给我的输出类似于1790-01-01,strtotime也不起作用,我不知道如何让它以我上面描述的方式工作。
答案 0 :(得分:1)
您可以使用DateTime课程进行时间计算:
$start = new DateTime;
$end = clone $start;
$end->modify("+{$date['expire']} seconds");
$diff = $start->diff($end);
print_r($diff);
DateInterval Object
(
[y] => 0
[m] => 0
[d] => 0
[h] => 0
[i] => 4
[s] => 29
[invert] => 0
[days] => 0
)
正如您在输出中所看到的,您拥有所需的所有信息。要访问它,只需使用$diff->i
分钟,$diff->s
秒等,或使用DateInterval::format形成间隔。
答案 1 :(得分:0)
我强烈建议使用PHP的DateTime
对象而不是strtotime.
http://www.php.net/manual/en/book.datetime.php
您可以使用Datetime::diff
方法获取日期差异。
此外,您可以根据需要设置输出样式:
$datetime->diff()->format('%y Years, %m Months, %d Days')
答案 2 :(得分:-1)
对不起家伙,但这些都没有,这个东西time_elapsed_string($ptime)
无论我做什么,我甚至可以手动设置日期,它仍然会回归44年......
新的如此冷酷的功能DateTime类并不准确,它在计算时远未真实,有更专业和有效的解决方案,我会等到有人提出实际有效的解决方案。
同样,我相信没有人想要业余功能,有时候工作有时不会写得很糟糕(几个月总是30天?不,谢谢)。在阅读php手册时,你会发现有很多证据表明datetime类不起作用,即使在stackoverflow上我也看过那种帖子。
这个东西很好:
select *,Concat(hour(diffTime),' hours ',minute(diffTime),' Minutes ',second(diffTime),' seconds remaining') as timetaken
from (select *,sec_to_time(UNIX_TIMESTAMP(now())- UNIX_TIMESTAMP( ttable.pay_date))
as diffTime from users ttable )
as temptable1
我发现它与日期计算有关的不同主题,将其调整到我的数据库并且它有效,但不幸的是它只显示小时分钟和秒,当它像几天它显示800小时,例如,我不了解它是如何工作的,但我相信它可以修改,以显示几个月和几天也许有人会知道如何做到这一点