gpt4 book ai didi

php - 用php计算DATETIME之间的时间

转载 作者:行者123 更新时间:2023-11-29 02:17:59 25 4
gpt4 key购买 nike

我正在从一个简单的 SELECT 查询调用一些数据,其中该行包含三个字段,start_time(DATETIME) , end_time(DATETIME) & reopen_time(DATETIME) .

我正在尝试计算 start_time 之间的时间和 end_time & 也在 start_time 之间& reopen_time如果是这种情况。我要确定的方法是通过另一个名为 complete 的专栏。 , 将值设置为 1 或 0。它将计算 start_timeend_time如果完整值为 1 且 start_timereopen_time is值为0。

现在,到目前为止,我的 PHP 看起来如下所示;我正在找人帮忙做套管和眼睛:

$id=$_GET['id']; //this grabs the id from the previous page depending on which task is clicked.
$sql = "SELECT * FROM to_do_list WHERE id=$id";
$result = mysqli_query($db, $sql);

if(mysqli_num_rows($result) > 0){
while($row = mysqli_fetch_assoc($result)){
$date1 = $row["start_time"];
$date2 = $row["end_time"];
$diff = abs(strtotime($date2) - strtotime($date1));
$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
printf("%d years, %d months, %d days\n", $years, $months, $days);
}
} else {
echo "There are no tasks!";
}

现在,我得到的结果是:0 年,0 个月,0 天,但没有错误。我假设数据库中的数据格式可能不正确?

最佳答案

我会花一些时间(看到双关语了吗?)查看 PHP 类 DateTime ( http://php.net/manual/en/class.datetime.php )。

这个类已经有一个内置的方法来获取日期之间的差异,包括像闰年这样的情况,创建一个 DataInterval 对象。然后使用 DataInterval 对象,您可以格式化和提取您想要的片段(月、日、年等...)

while($row = mysqli_fetch_assoc($result)){    
$date1 = $row["start_time"];
$date2 = $row["end_time"];
$datetime1 = new DateTime($date1);
$datetime2 = new DateTime($date2);
$interval = $datetime1->diff($datetime2);
echo $interval->format('%y years, %m months, %d days');
}

注意:如果 $date1$date2 字段完全相同,您将得到并间隔报告 0 的月份、年份等...时间上没有差异。

另外,请注意,因为 DateInterval 会考虑闰年等变化,您需要记住并非每个“月”都是相等的。如果您需要知道确切的天差,DateInterval 提供了一个公共(public)属性 days:

 $date1 = new DateTime('2015-02-27');  // 2015 was a 'regular' year, Feb had 28 days
$date2 = new DateTime('2015-03-27');
$interval_1_2 = $date1->diff($date2);

$date3 = new DateTime('2016-02-27'); // 2016 was a 'leap' year, Feb had 29 days
$date4 = new DateTime('2016-03-27');
$interval_3_4 = $date3->diff($date4);

echo $interval_1_2->format('%m months, %d day '); // 1 month 0 days
echo "Total Days: ".$interval_1_2->days."\n"; // 28 days

echo $interval_3_4->format('%m months, %d day'); // 1 month 0 days
echo "Total Days: ".$interval_3_4->days."\n"; // 29 days

Dev-club 的第一条规则:不要重新发明轮子,除非:

  1. 您不关心功能,只是为了某种学习实验而对之前已解决很多很多次的问题进行实验。
  2. 并愿意以可能无法完全涵盖 100% 用例的古怪结果告终。
  3. 只是玩得开心。

关于php - 用php计算DATETIME之间的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36378097/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com