PHP datetime diff错误

时间:2016-06-15 13:23:34

标签: php datetime dateinterval

我试图在PHP中的两个DateTime对象之间找到区别,答案似乎是错误的。正如您所看到的,diff()函数给出的时差为4小时41分钟,但时差显然更接近7小时。

$eastern_tz = new DateTimeZone( "US/Eastern" );

$now         = new DateTime( "now", $eastern_tz );
$future_date = new DateTime( $future_date_string ); //'2011-05-11 12:00:00'

$future_date->setTimezone( $eastern_tz );

$interval = $future_date->diff( $now );

var_dump( $now );
var_dump( $future_date );
var_dump( $interval );

return $interval->format( $format ); //"%d days, %h hours, %i minutes, %s seconds"

//调查信息

object(DateTime)[483]
  public 'date' => string '2016-06-15 09:18:41' (length=19)
  public 'timezone_type' => int 3
  public 'timezone' => string 'US/Eastern' (length=10)
object(DateTime)[484]
  public 'date' => string '2016-06-15 14:00:00' (length=19)
  public 'timezone_type' => int 3
  public 'timezone' => string 'US/Eastern' (length=10)
object(DateInterval)[479]
  public 'y' => int 0
  public 'm' => int 0
  public 'd' => int 0
  public 'h' => int 4
  public 'i' => int 41
  public 's' => int 19
  public 'weekday' => int 0
  public 'weekday_behavior' => int 0
  public 'first_last_day_of' => int 0
  public 'invert' => int 1
  public 'days' => int 0
  public 'special_type' => int 0
  public 'special_amount' => int 0
  public 'have_weekday_relative' => int 0
  public 'have_special_relative' => int 0

2 个答案:

答案 0 :(得分:1)

创建$future_date = new DateTime( $future_date_string );时,这是默认的PHP时区吗?

只有在渲染日期或导入新字符串时才需要

$future_date->setTimezone( $eastern_tz );。解析$future_date_string已经太迟了。

答案 1 :(得分:0)

使用我的代码它会对你有用。

$fromTimes = date('d-m-Y',strtotime('15-06-2016 06:57:27')); //from date and time
$toTimess = date('d-m-Y',strtotime('17-06-2016 10:25:30')); //to date and time
$date_a = new DateTime($toTimess); //converting the date and time
$date_b = new DateTime($fromTimes);
$interval = date_diff($date_a,$date_b); //find difference 
$day = $interval->format('%d')*24; //get day difference
$hours = $interval->format('%h'); // get hour
$mins = $interval->format('%i'); //get mins
if($mins <10)
{ $mins = '0'.$mins; }
echo $total_hours = ($hours + $day).':'.$mins;

希望它对你有用......