构建mysql php倒计时功能时的输出格式

时间:2013-09-03 21:50:18

标签: php mysql

我一直在努力解决这个问题很长一段时间,在论坛上花了很长时间后,我想出了这段代码:

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也不起作用,我不知道如何让它以我上面描述的方式工作。

3 个答案:

答案 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小时,例如,我不了解它是如何工作的,但我相信它可以修改,以显示几个月和几天也许有人会知道如何做到这一点