php DatePeriod不会按预期返回2天 [英] php DatePeriod does not return 2 days as expected

查看:87
本文介绍了php DatePeriod不会按预期返回2天的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试着在一段时间内得到所有的日子。无论是整天还是几个小时都没关系。我使用DatePeriod的当前代码对我来说不起作用。



示例:

  [start] => DateTime对象

[date] => 2014-01-27 22:40:40
[timezone_type] => 1
[时区] => +00 :00


[end] => DateTime对象

[date] => 2014-01-28 17:40:40
[timezone_type] => 1
[时区] => +00 :00


$ interval = new DateInterval('P1D'); // 1Day Interval
$ daterange = new DatePeriod($ time ['start'],$ interval,$ time ['end']);

$ return ['days'] = array();

foreach($ daterange as $ date){
$ return ['days'] [] = $ date-> format(Y-m-d);
}

我想获得

  [0] => 2014-01-27 
[1] => 2014-01-28

但我只收到

  [0] => 2014-01-27 

可以更改DatePeriod参数吗?

解决方案

DatePeriod 对象忽略上一个期间。你可以通过按你的间隔增加结束日期来解决这个问题:

  $ interval = new DateInterval P1D'); 
$ start-> setTime(0,0);
$ end-> setTime(0,0) - > add($ interval);
$ periods = new DatePeriod($ start,$ interval,$ end);

演示



更新: 00:00:00)开始和结束日期的时间部分,如果您只是通过天数循环。


I try to get all days within a period of time. It does not matter if it is a full day or only some hours. My current code using DatePeriod does not work for me.

Example:

[start] => DateTime Object
    (
        [date] => 2014-01-27 22:40:40
        [timezone_type] => 1
        [timezone] => +00:00
    )

[end] => DateTime Object
    (
        [date] => 2014-01-28 17:40:40
        [timezone_type] => 1
        [timezone] => +00:00
    )

$interval = new DateInterval('P1D'); // 1Day Interval
$daterange = new DatePeriod($time['start'], $interval ,$time['end']);

$return['days'] = array();

foreach($daterange as $date){
    $return['days'][] = $date->format("Y-m-d");
}

I would like to get

[0] => 2014-01-27
[1] => 2014-01-28

But i only get the

[0] => 2014-01-27

Is it possible to change DatePeriod parameters or something ?

解决方案

DatePeriod object ignores last period. You can solve that by increasing end date by your interval:

$interval = new DateInterval('P1D');
$start->setTime(0, 0);
$end->setTime(0, 0)->add($interval);
$periods = new DatePeriod($start, $interval, $end);

demo

Updated: remove (set to 00:00:00) time parts on start and end dates, if you are only looping via days.

这篇关于php DatePeriod不会按预期返回2天的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆