麻烦在几个小时内变老

时间:2011-02-25 19:18:12

标签: php mysql datetime date time

我正在尝试以小时计算某事的年龄。

$ data ['record']是DATETIME字段中的mysql NOW()时间戳。

$ data ['record']是20分钟,当我这样做时:

$minutes= date('i',(strtotime("now")-strtotime($data['record'])));

$ minutes正确返回20,但出于某种原因,当我尝试$ hours时,它返回'5'。

$hours = date('g',(strtotime("now")-strtotime($data['record'])));

这没有意义,因为记录不到60分钟,$ hours应该返回0 ...

当我检查“strtotime(”now“) - strtotime($ data ['record'])的值时,它等于'980'。救命啊!

3 个答案:

答案 0 :(得分:2)

请比较php的strtotime("now")和sql中select now();的输出。我认为这里隐藏着一个时区问题。

如你所说,strtotime("now")-strtotime($data['record'])返回980,应该是几分钟。 960可分为60,并在16小时出来,所以980是16小时20分钟 - 20分钟正是你想要的。您需要调整任一实例以使用另一个实例 - 我总是使用UTC。如果需要显示它,请适当地解析它并输出当地时间。

答案 1 :(得分:1)

请参阅:http://php.net/manual/en/function.date.php

当$ format参数=“g”时,它返回值1-12。

答案 2 :(得分:0)

Date不会像您期望的那样完成工作。

日期采用时间戳(自Unix Epoch(1970年1月1日00:00:00 GMT)以来的秒数),并将其转换为清晰易读的时间格式。基本上,值为980,你将获得1月1日午夜+ 980秒(大约1970年1月1日00:16:20 GMT。当你转换时区差异时,(可能是,大约5小时差异)这就是你得到五个。

要解决此问题,只需取980,然后除以60得到分钟,然后再除以60得到小时,所以:

$hours = ((strtotime("now")-strtotime($data['record'])) / 60) / 60;

不需要date,因为你需要相对时间,而不是绝对时间。