0

我已经为此苦苦挣扎了很长一段时间,在论坛上花费了几个小时后,我想出了以下代码:

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

4

3 回答 3

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格式化间隔。

于 2013-09-03T21:59:09.253 回答
0

我强烈建议使用 PHP 的DateTime对象而不是strtotime.

http://www.php.net/manual/en/book.datetime.php

您可以使用方法获取日期差异Datetime::diff

此外,您可以根据需要设置输出样式:

$datetime->diff()->format('%y Years, %m Months, %d Days')
于 2013-09-03T21:55:21.027 回答
-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 小时时,我不明白它是怎么做到的工作正常,但我相信它可以被修改以显示年月和日也许有人会知道怎么做

于 2013-09-04T06:31:31.690 回答