【问题标题】:PHP | count num of days for current month in a date rangePHP |计算日期范围内当前月份的天数
【发布时间】:2015-02-03 13:08:42
【问题描述】:

我正在尝试从日期范围中获取当前月份或任何其他月份的日期。

假设我有一个如下的日期范围。

$startDate = "2014-12-10";
$endDate = "2015-2-3";

我只想计算当前月份的天数/日期"February" 如果开始日期和结束日期大于 1,则结果为 3。

但是我怎样才能让它以编程方式工作呢??

-=-=-=-=-==-=

更新:

我想我无法解释我的问题,

让我们采用相同的日期范围..

如果我想以编程方式取出 12 月的天数

应该是这样的

21 天,因为开始日期是2014-12-10

日期在范围内以编程方式来自数据库..

-=-==-=-=-=-=-=

更新 2:

另一个简单的例子

假设是否批准了从28-1-20156-2-2015 的员工的休假

所以这里的员工休假开始日期将是

$sartDate = '28-1-2015';
$endDate = '6-2-2015';

所以员工的总休假是

$totalleaves = $endDate - $startDate //It is not right way to take out the differece only For sake of Example shown it

这会给我910 天数

但如果我们看到,这些叶子被分成两个不同的月份。 我想生成一个报告,我想看看员工在特定月份休假了多少,假设上个月January

我想下面的日期是 4 天,因为下面的日期在日期范围内,它们属于一月。

28-1-2015
29-1-2015
30-1-2015
31-1-2015

所以如果我想得到每个月的数组结果,它会 像

array(
'January' => array(
 'TotalLeavesTaken' => 4
),
'February' => array(
'TotalLeavesTaken' => 6
)
);

我认为这是我能解释的最好的了..

【问题讨论】:

  • startDate 与问题有何关系?
  • 为什么不只考虑只考虑日期。假设您的日期是 2015 年 2 月 3 日,请仅考虑 3,这将按照您的要求给您 3。所以如果是 2015 年 2 月 27 日,那么你应该只抓取 27 和当月,这将给出当月的 27 天
  • 你可以简单地使用 date('d');
  • @symbolicConstant 谢谢先生的回复,但这只是一个例子,假设我想计算上个月的日期,那么在同一日期范围内我需要做什么?

标签: php date


【解决方案1】:

有问题更新后调整

好的,现在我在您上次更新后进行了调整。希望它是您正在寻找的:

function getLeavesInPeriod($start, $end) {

    $date = new DateTime($start);
    $endDate = new DateTime($end);

    $leaves = array();

    while($date <= $endDate ) {
        $year = $date->format('Y');
        $month = $date->format('M');        

        if(!array_key_exists($year, $leaves))
            $leaves[$year] = array();
        if(!array_key_exists($month, $leaves[$year]))
            $leaves[$year][$month] = 0;

        $leaves[$year][$month]++;
        $date->modify("+1 day");
    }
    return $leaves;
}

$leaves = getLeavesInPeriod("2015-1-5", "2015-2-3");
print $leaves[2015]["Jan"]; //27

【讨论】:

  • 太棒了,谢谢,非常感谢.. 这就是我从昨天开始尝试实现的内容.. 爱你的工作.. 你的天才.. 再次感谢。
【解决方案2】:

不确定是否正确理解了您的问题,

date('d', strtotime($endDate));

【讨论】:

  • 谢谢先生的回复,先生,这是一个示例问题。我想计算特定月份日期范围内的日期/天数。例如:在 2 月,总天数为 3,因为在此日期范围内,3 天属于 2 月,整个 1 月的日期将被计算为 31 或 30,如果我们发现 12 月,则将根据 12 月的日期计算 20 或 21 天匹配日期范围。对不起我的英语不好..
  • @SizzlingCode:那么您正在寻找 DateTime::diff,对吗? php.net/manual/en/datetime.diff.php
  • 是的,但问题是如何计算给定日期范围内特定月份的天数。
  • @SizzlingCode:抱歉,我不明白您需要什么...您能否在这些示例中添加更多关于 start/endDate 的示例以及您希望返回的内容?请把它们放在你的问题中。
  • 对不起,我的错,不。日期差异会有所不同..我的意思是一个月中计算天数,我不确定它是否可能与日期差异有关..
【解决方案3】:

让我们试试这个

$month = strtotime(date('Y-m-01', time()));
$daysCount = (int)(time() - $month) / (24 * 3600);

【讨论】:

    【解决方案4】:

    它会帮助你:我正在用它来获得天数

    $date_diff = $end_date - $start_date;
    //difference of two  dates
    

    这将返回您的天数。只是您想要这个还是其他什么。请确认它是否对您有帮助。

    $days_left = floor($date_diff / (60*60*24));// No. of days
    

    【讨论】:

    • 是的,我想要这样的东西.. 但它从 startdate 到 end_date 的所有日子。我想要的是从那个范围内的特定月份..
    • 是的,这是可能的,您可以拆分日期并检查您的月份是 12 还是您想要的(为此定义常量),然后将上面的代码放入 if 语句中。如果有帮助,请回复你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    • 2011-02-05
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多