获取天数并确定两个日期之间的哪个月

时间:2017-07-19 09:46:09

标签: php arrays date logic

我知道这很疯狂,但我仍然在寻求你的解决方案。

现在,我有两个日期:假设开始日期:2017-02-01和结束日期:2017-04-01。

如果我将结束日期与开始日期进行比较,我当然会得到60天(其中包括2017-02-01的一天)。

假设我不知道这两个月之间的月份和月份是多少天。呃...无论如何要确定日期和月份......很清楚?

这样的事情:

  1. 2017-02-01 => 2017-02-28 = 28天,这是二月
  2. 2017-03-01 => 2017-03-31 = 31天,这是三月
  3. 2017-04-01 => 2017-04-01 = 1天,这是4月
  4. 我只能在PHP中找到两个日期之间的日子,当然它比这个更容易。我认为这个已经涵盖了数组概念,已经超出了我的IQ XD。

    我需要你的帮助,通过解决这个问题证明你自己,非常感谢你!非常感谢。

    更简单:我想找到的是 - 我不想找到两个日期之间的那一天,我想找到这两个日期之间每月的月份和天数。

    P / S:我没有任何代码,因为我甚至不知道如何开始编码。

3 个答案:

答案 0 :(得分:2)

您可以使用date_diff函数。 date_diff函数计算两个日期之间的日期,因此您可以添加2来计算您的日期..

modena.css

答案 1 :(得分: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-05-01和2017-06-01之间进行操作,则不会在月份数组中注册6月。

答案 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