【问题标题】:how to get time period between two dates如何获取两个日期之间的时间段
【发布时间】:2014-01-30 15:30:00
【问题描述】:

我有两个日期,我想知道它们之间的时间。
我试试这个:

$created_dt="2014-01-30 09:27:02";    
$done_dt="2014-01-30 16:29:38";

$created_dt=strtotime($created_dt); //1391066822
$done_dt=strtotime($done_dt); //1391092178
$runing_time= $created_dt-$done_dt; //25356
$runing_time= date('H:i',$runing_time);
echo $runing_time; //  "09:02" <----------??????? 

为什么 $runing_time = 09:02 ???

有什么好的方法可以解决这个问题?
谢谢

第 2 部分
我怎样才能把几个 $intervals 加在一起?然后得到他们的平均值?
我试试:

   $average_time;
   foreach($tasks as $task)
   {

   $date1 = new DateTime($task['start']);
   $date2 = new DateTime($task['end']);
   $interval = $date1->diff($date2);
   $runing_time=$interval->format("%h hours, %i minutes, %s seconds");
   $average_time+=$interval ;
   }
   $final_average_time=average_time/4;

显然我的代码不起作用,因为 $interval 是一个对象。

【问题讨论】:

  • 请使用php函数date_diff()php.net/manual/en/datetime.diff.php
  • 你在使用什么数据库,mysql?
  • 因为你是在问它在你的时区在 unix 时间戳 25356 上的几小时和几分钟,这与 to 时间之间的秒数差异无关。

标签: php date date-math


【解决方案1】:

使用DateTime()DateInterval() 进行日期计算。 要容易得多

$date1 = new DateTime("2014-01-30 09:27:02");
$date2 = new DateTime("2014-01-30 16:29:38");
$interval = $date1->diff($date2);
echo $interval->format("%h hours, %i minutes, %s seconds");

See it in action

【讨论】:

  • @user2706762 这需要单独提出问题。
【解决方案2】:

尝试使用 DateTimediff 方法返回两个 DateTime 对象之间的差异

$createDate = DateTime::createFromFormat("Y-m-d H:i:s", $created_dt);
$endDate = DateTime::createFromFormat("Y-m-d H:i:s", $done_dt);
$interval = $createDate->diff($endDate2);
echo $interval->format('%R%a days %H hours %i Minutes and %s Seconds');

【讨论】:

  • createFromFormat() 是不必要的,因为DateTime() 很容易解析 MySQL 日期时间格式
  • @John Conde 如果格式是 MYSQL 日期时间,那么避免 createFromFormat 会更快?
  • 不知道有没有速度上的差异。但如果有的话,它可能太小了,这真的无关紧要。但是在不需要时避免使用 createFromFormat() 会更简单。
  • 谢谢@John Conde。以后我会牢记这一点。
【解决方案3】:

我知道,您最好使用DateTime(),但是这里没有人谈论您的问题以及您为什么得到错误的结果。

因为date()函数获取第二个参数作为时间戳并返回日期:1970-1-1 00:00:00 GMT+given time stamp,注意GMT部分。 这意味着如果您的时区是 +2,则 echo date("Y-m-d H:i:s",0) 返回 1970-1-1 2:00:00不是 1970-1-1 00:00:00

所以,你得到的结果是 07:02(real different) + 2 hours(your time zone) 。如果您坚持使用date() 获取结果,则必须将最后几行更改为:

$runing_time= $done_dt - $created_dt - 2*3600;
$runing_time= date('H:i',$runing_time); 
//returns 07:02

【讨论】:

  • @user2706762 1.这是另一个问题,2.你没有回答任何答案
猜你喜欢
  • 1970-01-01
  • 2019-06-22
  • 2012-03-24
  • 2019-05-07
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多