我正在将日期与日期时间进行比较,但我得到了我期望的结果,但我也想知道是否有更好的方式来显示我的输出,并且我对当前输出也有查询。
以下是我当前代码的片段:
<?php
$todayDate = date('Y-m-d');
$seconds = strtotime($todayDate) - strtotime($dueDate);
$hours = $seconds / 60 / 60;
echo number_format($hours, 2);
?>
在我的案例中,我的数据库中的$dueDate
是2017-06-26 09:11:28
,因此输出显示为-57.19
。我的问题是,是否有一种干净的方式来剥离-
并在小时后添加h
并在分钟后添加m
以便输出看起来像这样?
57h 19m
更新
所以在摆弄后我设法做到了:
substr($dateFormat,0,3).'h '.substr($dateFormat,4).'m';
现在输出为-57h 19m
我仍然有这个负面的角色,我不确定这是否真的正确我似乎无法解决它,因为我的数据库中的日期是提前一天,但它显示负值......
答案 0 :(得分:4)
使用DateTime类非常简单
11h 37m
结果:
$dueDate = '2017-06-25 00:00:00';
$due = DateTime::createFromFormat('Y-m-d H:i:s', $dueDate, new DateTimeZone('Europe/London'));
$today = new DateTime('now', new DateTimeZone('Europe/London'));
$diff = $today->diff($due);
echo $diff->format('%R %hh %im').PHP_EOL;
if ( $diff->invert ) {
echo $diff->format('Overdue by %dd %hh %im');
} else {
echo $diff->format('You have %dd %hh %im till overdue');
}
但是当你问到时区时,这里也是如何添加时区的。而且当你的原始日期实际上有些遥远的时候我添加了更准确的差异输出
+ 1h 6m
You have 0d 1h 6m till overdue
结果
class A
{
int always_even = 0;
public:
void doSomething()
{
always_even++;
always_even++;
}
}
答案 1 :(得分:0)
你需要保持日期整数
$time = time();
后
你可以在每个地方和外翻方式使用这个
例如
$date1 = time();
$date2 = time();
$comparingdate = $date2 - $date1;
$myFormat = date("T-m-d h:i:s",$comparingdate); // Show how you want
答案 2 :(得分:0)
使用楼层和圆形函数来获取使用abs函数将日期转换为正号后的分钟和小时
<?php
$todayDate = date('Y-m-d');
$dueDate = "2017-06-26 09:11:28";
$seconds =abs(strtotime($todayDate) - strtotime($dueDate));
$hours =floor($seconds / 60 / 60);
$minutes= round($seconds / 60 / 60 - $hours,2)*100;
echo "<br>";
echo $hours. " H :";
echo $minutes. " M ";
?>