【问题标题】:get number of days from given dates in a array php从数组php中的给定日期获取天数
【发布时间】:2023-03-03 15:06:02
【问题描述】:

我试图获取从第一个日期到第二个日期的天数,然后从第二个日期到第三个日期等等。 我有一个这样的数组

$dates = array(
    2016 - 02 - 01,
    2016 - 03 - 01,
    2016 - 04 - 01,
    2016 - 05 - 01,
    2016 - 06 - 01,
    2016 - 07 - 01,
    2016 - 09 - 01,
    2016 - 11 - 01,
    2016 - 12 - 01,
    2017 - 01 - 01,
    2017 - 12 - 01
);

我想获取从 2016-02-01 到 2016-03-01 的天数,然后从 2016-03-01 到 2016-04-01 等等,如果您发现它们中的日期确实跳跃了1个多月。 我希望它在这样的数组中

array()(
    [0] => 0,
    [1] => 30,
    [2] => 60
    //so on ...
) 

这就是我的做法,但我遇到了uninitialized string offset 之类的错误,我想我的做法很可能是错误的

public  function rangeDates()
{
    $dates = array(
        '2016-02-01',
        '2016-03-01',
        '2016-04-01',
        '2016-05-01',
        '2016-06-01',
        '2016-07-01',
        '2016-09-01',
        '2016-11-01',
        '2016-12-01',
        '2017-01-01',
        '2017-12-01'
    );
    $datez = array();
    $index = 0;
    $indexone = 1;
    foreach($dates as $date)
    {
        $datez = round(abs(strtotime($date[$index]) - strtotime($date[$indexone])) / 86400);
        $index++;
        $indexone++;
    }

    echo $datez;
}

日期是 string 格式,我忘记提及的额外信息是需要添加天数,例如如果我们只计算年份

array(11) (
  [0] => (int) 0
  [1] => (int) 365
  [2] => (int) 730
  [3] => (int) 1095
  [4] => (int) 1460
  [5] => (int) 1825
  [6] => (int) 2190
  [7] => (int) 2555
  [8] => (int) 2920
  [9] => (int) 3285
  [10] => (int) 3650

【问题讨论】:

  • 请检查this,让我知道您是否可以。只有第一部分是关于你所需要的。 如果你不明白,我可以为你解答。
  • @FrayneKonok 对不起,我想我没有正确提及它或者很难理解,但我想要的是不同之处,但随后被添加到下个月,所以基本上 0 , 30 , 60, 90 ,所以它就像前几天被添加到接下来的几天。希望我说得通
  • @Anant 对不起,我想我没有正确提及它或者它很难理解,但我想要的是差异,但随后被添加到下个月,所以基本上 0 , 30 , 60, 90 ,所以它就像前几天被添加到接下来的几天。希望我说得通
  • @MasnadNihit,如果我在您的尝试中发表评论,那么有几点需要注意$datez =,您将其初始化为数组并像字符串一样使用最后你回应它。

标签: php arrays date


【解决方案1】:

这就是您所需要的,循环遍历日期数组,然后相应地计算日期的差异。您的循环将运行到总数组大小的一小部分,从间隔中只需调用天数并将其存储在数组中。

$dates = array(
    "2016-02-01",
    "2016-03-01",
    "2016-04-01",
    "2016-05-01",
    "2016-06-01",
    "2016-07-01",
    "2016-09-01",
    "2016-11-01",
    "2016-12-01",
    "2017-01-01",
    "2017-12-01"
);

$datez = array();
$date = array();
$datez[] = 0;

for($i = 1; $i < count($dates) - 1; $i++){
    $start_date = $dates[$i-1];
    $end_Date = $dates[$i];

    $date1 = new DateTime($start_date);
    $date2 = new DateTime($end_Date);
    $interval = $date1->diff($date2);

    $date[]  = $interval->days;
    $datez[] = array_sum($date);
}

print_r($date);
print_r($datez);

Online Example

【讨论】:

  • 对不起,我想我没有正确提及它或者它很难理解,但我想要的是差异,然后被添加到下个月,所以基本上 0 , 30 , 60, 90, 所以就像前几天被添加到接下来的几天一样。希望我说得通
  • 如果是,那么您不应该需要所有这些。只需一个简单的开始日期和结束日期差异就可以完成您的工作。
  • 我编辑了顶部的问题,现在它在最后提供了更详细的信息,请您看一下
  • 你的问题仍然说明我为你做了什么。
  • Konock,你得到了两个日期之间的差异,你能帮我添加以前的日期吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-15
相关资源
最近更新 更多