37

私はPHPで2つの日付を持っています

$date1 = 'May 3, 2012 10:38:22 GMT'

$date2 = '06 Apr 2012 07:22:21 GMT'

それから私はそれらの両方を引きます

$date2 - $date1

、そして得る

Result:6

結果が 27 ではなく 6 になるのはなぜですか? ... ? 2 つの日付を減算し、年と日と時間を減算しながら月の違いに基づいて結果を返すようにするにはどうすればよいですか?

4

7 に答える 7

74

パート 1: なぜ結果は 6 なのですか?

日付は、最初に減算するときは単純な文字列です。PHP はそれらを整数に変換しようとします。これは、最初の非数値まで変換することによって行われます。したがって、date2 は 6 になり、date1 は 0 になります。

パート 2: どのように機能させるのですか?

$datetime1 = strtotime('May 3, 2012 10:38:22 GMT');
$datetime2 = strtotime('06 Apr 2012 07:22:21 GMT');

$secs = $datetime2 - $datetime1;// == <seconds between the two times>
$days = $secs / 86400;

適宜変換してください。

于 2012-05-06T08:03:03.333 に答える
21

DateTimeDateIntervalを使用して、

$date1 = new DateTime("May 3, 2012 10:38:22 GMT");
$date2 = new DateTime("06 Apr 2012 07:22:21 GMT");
echo $date1->diff($date2)->format("%d");
于 2012-05-06T08:03:03.940 に答える
14

mktime n を使用してタイムスタンプで日付を作成し、減算してから日付関数を使用して、希望する方法で表示する方法が 1 つあります。

他の方法は、両方の日付を同じ形式でフォーマットしてから減算することです....

第三の方法

$date1=  new DateTime("May 3, 2012 10:38:22 GMT");
$date2= new DateTime("06 Apr 2012 07:22:21 GMT");
echo $date1->diff($date2)->("%d");

往路

$datetime1 = strtotime('May 3, 2012 10:38:22 GMT');
$datetime2 = strtotime('06 Apr 2012 07:22:21 GMT');
$secs = $datetime2 - $datetime1;// == return sec in difference
$days = $secs / 86400;
于 2012-05-06T08:05:41.053 に答える
6

提示されたソリューションのほとんどは機能しているように見えますが、誰もが 1 つのことを忘れています: 時間です。

エヴァンの例を挙げる

$datetime1 = strtotime('May 3, 2012 10:38:22 GMT');
$datetime2 = strtotime('06 Apr 2012 07:22:21 GMT');

$secs = $datetime2 - $datetime1;// == <seconds between the two times>
$days = $secs / 86400;

時間の部分をトリミングしないと、milscalculations につながる可能性があります。例: 2014-05-01 14:00:00(Ymd) との間の間隔は2014-05-02 07:00:00、1 ではなく 0,xxx になります。すべての日付の時間部分をトリミングする必要があります。

したがって、次のようになります。

$datetime1 = strtotime(date('Y-m-d', strtotime('May 3, 2012 10:38:22 GMT')));
$datetime2 = strtotime(date('Y-m-d', strtotime('06 Apr 2012 07:22:21 GMT')));

$secs = $datetime2 - $datetime1;// == <seconds between the two times>
$days = $secs / 86400;
于 2014-05-09T08:53:21.637 に答える
5
$todate= strtotime('May 3, 2012 10:38:22 GMT');
$fromdate= strtotime('06 Apr 2012 07:22:21 GMT');
$calculate_seconds = $todate- $fromdate; // Number of seconds between the two dates
$days = floor($calculate_seconds / (24 * 60 * 60 )); // convert to days
echo($days);

このコードは、2 つの日付の日付差を検出します。

ここで出力は27です

于 2013-05-27T10:42:39.580 に答える
2
echo 'time'.$notification_time=  "2008-12-13 10:42:00";
 date_default_timezone_set('Asia/Kolkata');
 echo 'cureen'.$currenttime=date('Y-m-d H:i:s'); 
$now = new DateTime("$notification_time");
$ref = new DateTime("$currenttime");
$diff = $now->diff($ref);
printf('%d days, %d hours, %d minutes', $diff->d, $diff->h, $diff->i);
于 2016-10-22T06:18:12.393 に答える
0

diff(Dateinterval オブジェクトを返す) メソッドを使用する場合は、%a でフォーマットするのが正しい方法です。つまり:

http://php.net/manual/en/dateinterval.format.phpを確認すると

正しい方法は次のとおりです。

 echo $date1->diff($date2)->format("%a");

すべての日を取得するため

于 2016-12-30T11:20:18.653 に答える