0

私は2つの日付の間の月、日、時間、分を計算しています。月、日、分を計算することに成功しましたが、分を計算することはできません。以下は私のコードです.

<?php
    $date1 = "2012-07-01 00:00:00";
    $date2 = "2012-09-30 00:00:00";

    $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));
    $minutes = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24) / (60*60*24) / (60*60));

    printf("%d years, %d months, %d days, %d minutes\n", $years, $months, $days, $minutes);

?>
4

3 に答える 3

1

$diff他のすべてを解決するときに、変数を減らしてみてください。

$years = floor($diff / 31557600); // 31557600 = 365.25 * 86400
$diff -= $years * 31557600;
// I'd skip months, since different months have a different number of days.
// If you *really* want it, calculate the number of months from the days below.
$days = floor($diff / 86400); // 86400 = 24 * 3600
$diff -= $days * 86400;
$hours = floor($diff / 3600); // 3600 = 60 * 60
$diff -= $days * 3600;
$minutes = floor($diff / 60);
$diff -= $minutes * 60;
// $diff now equals the number of seconds left over

または、PHP のDate/Time オブジェクトを調べます。

$date1 = new DateTime("2012-07-01 00:00:00");
$date2 = new DateTime("2012-09-30 00:00:00");
$diff = $date1->diff($date2); // $diff is a DateInterval object

からの出力をどのようにフォーマットするかを決定するには、DateInterval->format() を参照$diffてください。

于 2012-06-22T16:26:47.640 に答える
0

秒を日/週/hh:mm:ss 時間などに変換するために、次の関数のいずれかを使用していました。それはクエリに答えるはずです。

function duration ($sec, $padHours = false)  {
  if ($sec > 1209600) return "> ". intval(intval($sec) / 604800) . " weeks";
  if ($sec > 604800) return "1 week";
  if ($sec > 172800) return "> ". intval(intval($sec) / 86400) . " days";
  if ($sec > 86400) return "1 day";
  $hms = "";
  $hours = intval(intval($sec) / 3600);
  $hms .= ($padHours)
        ? str_pad($hours, 2, "0", STR_PAD_LEFT). ":"
        : $hours. ":";
  $minutes = intval(($sec / 60) % 60);
  $hms .= str_pad($minutes, 2, "0", STR_PAD_LEFT). ":";
  $seconds = intval($sec % 60);
  $hms .= str_pad($seconds, 2, "0", STR_PAD_LEFT);
  return $hms;

}
于 2012-06-22T16:23:56.633 に答える