我正在尝试以小时计算某事的年龄。
$ 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'。救命啊!
答案 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
,因为你需要相对时间,而不是绝对时间。