PHP diff()给出了不正确的值,其中$ date1 ='2016-03-01'

Pet*_*erC 7 php

我使用下面的代码来确定一年中的员工服务:

$datePay1 = new DateTime($date1);
$datePay2 = new DateTime($date2);
$interval = $datePay1->diff($datePay2);
$vYears = $interval->y;
$vMonths = $interval->m;
$vDays = $interval->d;
$service = $vYears." years, ".$vMonths." months, ".$vDays." days"; 
Run Code Online (Sandbox Code Playgroud)

情况1:

$date1 = '2016-03-01';
$date2 = '2017-03-01';
Run Code Online (Sandbox Code Playgroud)

服务= 0年,11个月,30天

案例2:

$date1 = '2017-03-01';
$date2 = '2018-03-01';
Run Code Online (Sandbox Code Playgroud)

服务= 1年,0个月,0天

案例1似乎不正确.为什么是这样?是因为2016年是闰年吗?服务器运行PHP v5.6.

TsV*_*TsV 0

尝试这个:

        $tz = date_default_timezone_get();
        $usa = 'America/Chicago'; // America/*
        date_default_timezone_set($usa);

        //Case 1:
        $date1 = '2016-03-01';
        $date2 = '2017-03-01';

        //Case 2:
        //$date1 = '2017-03-01';
        //$date2 = '2018-03-01';

        $datePay1 = new \DateTime($date1);
        $datePay2 = new \DateTime($date2);
        $interval = $datePay1->diff($datePay2);
        $vYears = $interval->y;
        $vMonths = $interval->m;
        $vDays = $interval->d;
        $service = $vYears." years, ".$vMonths." months, ".$vDays." days";
        print_r($interval); // interval: + 1y

        date_default_timezone_set($tz);
Run Code Online (Sandbox Code Playgroud)

  • 请添加一些评论并解释您的代码将如何解决问题。 (3认同)