首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP:返回数组中两个日期之间的所有日期

PHP:返回数组中两个日期之间的所有日期
EN

Stack Overflow用户
提问于 2010-11-30 18:03:06
回答 24查看 284.7K关注 0票数 265

预期输入:

代码语言:javascript
复制
getDatesFromRange( '2010-10-01', '2010-10-05' );

预期输出:

代码语言:javascript
复制
Array( '2010-10-01', '2010-10-02', '2010-10-03', '2010-10-04', '2010-10-05' )
EN

回答 24

Stack Overflow用户

回答已采纳

发布于 2010-11-30 18:26:07

您还可以查看DatePeriod类:

代码语言:javascript
复制
$period = new DatePeriod(
     new DateTime('2010-10-01'),
     new DateInterval('P1D'),
     new DateTime('2010-10-05')
);

这应该会得到一个包含DateTime对象的数组。

迭代

代码语言:javascript
复制
foreach ($period as $key => $value) {
    //$value->format('Y-m-d')       
}
票数 512
EN

Stack Overflow用户

发布于 2010-11-30 18:08:49

代码语言:javascript
复制
function createDateRangeArray($strDateFrom,$strDateTo)
{
    // takes two dates formatted as YYYY-MM-DD and creates an
    // inclusive array of the dates between the from and to dates.

    // could test validity of dates here but I'm already doing
    // that in the main script

    $aryRange = [];

    $iDateFrom = mktime(1, 0, 0, substr($strDateFrom, 5, 2), substr($strDateFrom, 8, 2), substr($strDateFrom, 0, 4));
    $iDateTo = mktime(1, 0, 0, substr($strDateTo, 5, 2), substr($strDateTo, 8, 2), substr($strDateTo, 0, 4));

    if ($iDateTo >= $iDateFrom) {
        array_push($aryRange, date('Y-m-d', $iDateFrom)); // first entry
        while ($iDateFrom<$iDateTo) {
            $iDateFrom += 86400; // add 24 hours
            array_push($aryRange, date('Y-m-d', $iDateFrom));
        }
    }
    return $aryRange;
}

来源:http://boonedocks.net/mike/archives/137-Creating-a-Date-Range-Array-with-PHP.html

票数 156
EN

Stack Overflow用户

发布于 2012-02-10 17:54:33

这是非常非常灵活的。

代码语言:javascript
复制
/**
 * Creating date collection between two dates
 *
 * <code>
 * <?php
 * # Example 1
 * date_range("2014-01-01", "2014-01-20", "+1 day", "m/d/Y");
 *
 * # Example 2. you can use even time
 * date_range("01:00:00", "23:00:00", "+1 hour", "H:i:s");
 * </code>
 *
 * @author Ali OYGUR <alioygur@gmail.com>
 * @param string since any date, time or datetime format
 * @param string until any date, time or datetime format
 * @param string step
 * @param string date of output format
 * @return array
 */
function date_range($first, $last, $step = '+1 day', $output_format = 'd/m/Y' ) {

    $dates = array();
    $current = strtotime($first);
    $last = strtotime($last);

    while( $current <= $last ) {

        $dates[] = date($output_format, $current);
        $current = strtotime($step, $current);
    }

    return $dates;
}
票数 140
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4312439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档