2017-07-19 71 views
0

我知道這很瘋狂,但我仍然要求您的解決方案。獲取天數,並確定從兩個日期之間的月份

現在,我有兩個日期:讓說開始日期:2017-02-01和結束日期:2017-04-01。

如果比較結束日期​​和開始日期,我當然會得到60天(包括2017-02-01的一天)。

假設我不知道這兩個日期之間的月份和月份有多少天。呃...有無論如何確定日期和月份......清楚嗎?

像這樣:

  1. 2017年2月1日=> 2017年2月28日= 28天,這是二月
  2. 2017年3月1日=> 2017年3月31日= 31天,這是三月
  3. 2017年4月1日=> 2017年4月1日= 1天,這是四月

我只能找到PHP中的兩個日期之間的天,當然這是比這個更容易。我認爲這個已經涵蓋了陣列概念,並且已經超出了我的IQ XD。

我需要你的幫助,通過解決這個問題證明你自己,非常感謝你!非常感激。

簡而言之:我想找到的是 - 我不想在兩個日期之間找到一天,我想找出這兩個日期之間每個月的月份和多少天。

P/S:我沒有任何代碼,因爲我甚至不知道如何開始編碼。

+0

「我不知道幾月「,好吧,如果你有日期,那麼你知道這個月。 –

+0

4. 2017-05-01 => 2017-07-01 = 61天這是五月,六月,七月? – mulquin

+0

@JulienLachal讓我們說。 –

回答

0

通過下列方式我們可以發現兩個日期之間的天數:

$startTimeStamp = strtotime("2017/02/01"); 
$endTimeStamp = strtotime("2017/02/01"); 

$timeDiff = abs($endTimeStamp - $startTimeStamp); 

$numberDays = $timeDiff/86400; // 86400 seconds in one day 

// and you might want to convert to integer 
$numberDays = intval($numberDays); 

讓我知道,如果你面對的任何問題。

+0

但它不會告訴你OP請求的月份 –

+0

@JulienLachal謝謝你......你是對的。 –

+0

@Prabhu Nandan Kumar這並不符合我的要求,正如我所說的,這只是找到了不同之處。 –

0

PHP有一些相當強大的DateTime類和函數。

<?php 

$start = new DateTime('2017-05-01'); 
$end = new DateTime('2017-07-03'); 
$interval = new DateInterval('P1D'); 
$period = new DatePeriod($start, $interval, $end); 

$output = ['daysTotal' => 0, 'months' => []]; 
$months = []; 
foreach ($period as $dt) { 
    if (!in_array($dt->format("F"), $months)) { 
     $month = ['name' => $dt->format("F"), 'days' => cal_days_in_month(CAL_GREGORIAN, $dt->format("n"), $dt->format("Y"))]; 
     $output['months'][] = $month; 
     $months[] = $dt->format("F"); 

    } 
    $output['daysTotal']++; 
} 

var_dump($output); 

這將輸出:

array(2) { 
    ["daysTotal"]=> 
    int(63) 
    ["months"]=> 
    array(3) { 
    [0]=> 
    array(2) { 
     ["name"]=> 
     string(3) "May" 
     ["days"]=> 
     int(31) 
    } 
    [1]=> 
    array(2) { 
     ["name"]=> 
     string(4) "June" 
     ["days"]=> 
     int(30) 
    } 
    [2]=> 
    array(2) { 
     ["name"]=> 
     string(4) "July" 
     ["days"]=> 
     int(31) 
    } 
    } 
} 

注意:如果您2017年5月1日和2017年6月1日之間完成,也不會在幾個月數組中註冊六月。

2

您可以使用date_diff函數。 date_diff函數計算兩個日期之間的天,這樣你就可以加2,也算你的日期..

$date1=date_create("2017-02-01"); 
$date2=date_create("2017-04-01"); 
$diff=date_diff($date1,$date2); 

$res = $diff->format("%R%a days"); 
echo ($res + 2); 
0

只是試試這個

$from_date = "2017-02-01"; 
$to_date = "2017-04-01"; 
$start = $month = strtotime($from_date); 
$tmp = cal_days_in_month(CAL_GREGORIAN,date('m',strtotime($to_date)),date('Y',strtotime($to_date))); 
$end = strtotime(date('Y-m',strtotime($to_date)).'-'.$tmp); 
while($month < $end){ 
    $days = cal_days_in_month(CAL_GREGORIAN,date('m',$month),date('Y',$month)); 
    if(date('m',$start) == date('m',$month)) { 
     $days = $days - date('d',$start) + 1; 
    } else if(date('m',$end) == date('m',$month)) { 
     $days = date('d',strtotime($to_date)); 
    } 
    echo "Days :".$days." Month :".date('F',$month); 
    echo '<br>'; 
    $month = strtotime("+1 month", $month); 
} 

輸出將看起來像下面

Days :28 Month :February Days :31 Month :March Days :01 Month :April 
相關問題