2011-01-14 9 views
3

プロシージャスタイルのメソッドを使用して以下の2つの日付から月数を数えるにはどうすればよいですか?PHP - 特定の日付から何ヶ月を数える方法

PHPコード。

$delete_date = "2000-01-12 08:02:39"; 
$current_date = date('Y-m-d H:i:s'); //current date 
+0

2つの日付間の月数*を希望しますか? –

+0

はいそれは私です;私が探しているのは – HELP

答えて

0
$delete_date = "2000-01-12 08:02:39"; 
$current_date = date('Y-m-d H:i:s'); //current date 

$diff = strtotime($current_date) - strtotime($delete_date); 
$months = floor(floatval($diff)/(60 * 60 * 24 * 365/12)); 
echo $months . "\n"; 
+0

これは間違った値を返すエッジケースがあると思われます。 (毎月365/12日ではない) –

+0

@middaparkaとは何か:これはトラブルを引き起こす可能性が高いです。 2月1日から3月2日の間の範囲です。しかし、OPがどれほど正確であるかは正確ではないので、それはうまくいくかもしれません。 –

+0

まあ、それは問題の文脈によって異なります。月に30日、月に365/12 = 30.41666日があると考えることはOKですか?また、「floor」を使用して月数を丸めることはできますか?あるいはラウンド?または 'ceil'ですか? – scoffey

6

あなたはDateTime::diffを探していますか?

$delete_date = "2000-01-12 08:02:39"; 
$date_format = 'Y-m-d H:i:s'; 
$current_date = date($date_format); 
$diff = date_diff(date_create_from_format($date_format, $delete_date), date_create()); 
$months = $diff->m; 

何かの行に沿って。

+0

+1 PHP 5.3以上を使用している場合は完璧です。 –

+0

私はPHP5.3をまったく持っていません。 – HELP

0

これはあなたが探しているものですか?

$delete_date = "2000-01-12 08:02:39"; 
$current_date = date('Y-m-d H:i:s'); //current date 

// convert date to int 
$delete_date = strtotime($delete_date); 
$current_date = strtotime($current_date); 

// calculate it 
$diff = $delete_date - $current_date; 

// convert int to time 
$conv_diff = date('format', $diff); 
+0

私は1ヶ月、10ヶ月40ヶ月などのようなものを探していました。 – HELP

2

あなたは合計ヶ月、この方法を取得します:

$d1 = new DateTime("2000-01-12 08:02:39"); 
$d2 = new DateTime(); 
$d3 = $d1->diff($d2); 
$months = ($d3->y*12)+$d3->m; 

あなたはまだ残っ日$d3->dを処理する必要があります...それは、あなたのニーズによって異なります。

-2

これを試してください、それは簡単ですが、おそらくエノーグの雛ではなく、非常に効果的です。

function calculateMonthsBetweenDates($fMonth, $fDay, $fYear, $tMonth, $tDay, $tYear) 
{ 
    //Build datetime vars using month, day and year 
    $dateFrom = mktime(0, 0, 0, $fMonth, $fDay, $fYear); 
    $dateTo = mktime(0, 0, 0, $tMonth, $tDay, $tYear); 

    //Check dateTo is a later date than dateFrom. 
    if($dateFrom<=$dateTo){ 
     $yearF = date("Y", $dateFrom); 
     $yearT = date("Y", $dateTo); 
     $monthF = date("m", $dateFrom); 
     $monthT = date("m", $dateTo); 

     //same year 
     if ($yearF == $yearT) 
      $months = ($monthT - $monthF); 
     else{ 
     //different year 
      $months = (12*($yearT-$yearF)-$monthF) + $monthT; 
      } 
     return $months; 
     } 
    else 
     return false; //or -1 
} 
+0

このコードでは、異なる年の日付が正しく計算されません。 すなわち2000年1月1日から2000年12月までの間に11ヶ月間があると言いますが、2000年1月1日から2014年1月1日までの12ヶ月間はあります。 – Rosamunda

+0

申し訳ありませんRosamunda、私はそれを修正しました。今はどの日付でも動作します。 –

関連する問題