2017-07-19 73 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 
相关问题