1

2 つの日付の違いを示す次のコードがあります。今、私はその差に基づいて1時間あたり8ドルの基本料金で収入を計算したいと思っていますが、dateTimeが差を返す方法のためにこれを行うことができませんでした. アイデアはありますか?

$lastUpdate = new DateTime($lastUpdate['lastUpdate']);
$currentTime = new DateTime("2013-03-24 19:45:55");
$interval = $lastUpdate->diff($currentTime);
echo "difference " . $interval->y . " years, " . $interval->m." months, ".$interval->d." days " . $interval->h . " hours " . $interval->i . " minutes " . $interval->s . " seconds";
4

4 に答える 4

2

diff から合計秒数を取得し、それらを 3600 で割り、レートで倍数にします。

次のようなものを試してください: http://www.php.net/manual/en/dateinterval.format.php#102271

アイデアを提供するためのここからのコードの一部:

  //...
  public function to_seconds() 
  { 
    return ($this->y * 365 * 24 * 60 * 60) + 
           ($this->m * 30 * 24 * 60 * 60) + 
           ($this->d * 24 * 60 * 60) + 
           ($this->h * 60 * 60) + 
           ($this->i * 60) + 
           $this->s; 
  } 
  //...
于 2013-03-24T17:16:26.660 に答える
2

解決策は、秒に変換して掛けることです8/3600

$lastUpdate  = new DateTime($lastUpdate['lastUpdate']);
$currentTime = new DateTime("2013-03-24 19:45:55");
$interval    = $lastUpdate->diff($currentTime);
//generate time string
$timeStr     = "";
if($interval->y >0) { $timeStr .= $interval->y ." year"   .($interval->y==1 ? " ": "s "); }     
if($interval->m >0) { $timeStr .= $interval->m ." month"  .($interval->m==1 ? " ": "s "); }      
if($interval->d >0) { $timeStr .= $interval->d ." day"    .($interval->d==1 ? " ": "s "); }
if($interval->h >0) { $timeStr .= $interval->h ." hour"   .($interval->h==1 ? " ": "s "); }
if($interval->i >0) { $timeStr .= $interval->i ." minute" .($interval->i==1 ? " ": "s "); }
if($interval->s >0) { $timeStr .= $interval->s ." second" .($interval->s==1 ? " ": "s "); }
//add up all seconds
$seconds = ($interval->y * 365* 24 * 60 * 60)
         + ($interval->m * 30 * 24 * 60 * 60)
         + ($interval->d * 24 * 60 * 60)
         + ($interval->h * 60 * 60)
         + ($interval->i * 60)
         +  $interval->s;
//multiply by your wage (in seconds)
$hourly_rate = 8.00;
$pay         = ($seconds * $hourly_rate)/3600;
$pay         = round($pay,2,PHP_ROUND_HALF_UP); //round to nearest cent
//print out the resulting time, rate & cost statement
printf("Total time of %sat hourly rate of $%.2f equates to $%.2f\n",$timeStr,$hourly_rate,$pay);
于 2013-03-24T17:18:10.807 に答える
2

目的に strtotime を使用しない理由

$lastUpdate = strtotime($lastUpdate['lastUpdate']);
$currentTime = strtotime("2013-03-24 19:45:55");
$interval = ($currentTime - $lastUpdate)/(3600);
$interval = round($interval,2);
$income   = $interval*8;
echo $interval."hours";
于 2013-03-24T17:18:38.383 に答える
1

出力をきれいにしたい場合は、そこにあるものを保持して、いくつかの新しい変数を計算する必要があります。

$years = $interval->y * 365 / 24; // give it that it's not a leap year 
$months = $interval->m * 730; // approximation of how many hours are in a month
// ... so on
$grandSummation = $years + $months + $days + $hours + $seconds; 
$finalBaseApproximation = $grandSummation * 8; 
echo "Your income is $" . $finalBaseApproximation; 
于 2013-03-24T17:20:03.377 に答える