0

当我想从日期间隔中逐日显示时,我遇到了一个问题。

我的意思是我有一个简单的形式:

<form method="post" action="">
From Date1: <input type="text" name="date1" value="<!--10 days ago date (2013-09-14)-->"/>
<br>
To Date2: <input type="text" name="date2" value="<!--today's date (2013-09-24)-->"/>
<input type="submit" value="Change interval"/>
</form>

从这个表格我得到两个日期,我想显示它们之间的所有日子,像这样:

| 2013-09-14

| 2013-09-15

| 2013-09-16

| 2013-09-17

| .

| .

| 2013-09-24

如果可能的话,将所有这些日期保存在数组或变量中。

希望您能够帮助我。谢谢。

4

2 回答 2

3
$start    = new DateTime('2013-09-01');
$end      = new DateTime('2013-09-30');
$interval = new DateInterval('P1D');
$period   = new DatePeriod($start, $interval, $end);

foreach ($period as $dt)
{
    echo $dt->format("Y-m-d") . PHP_EOL;
}

看到它在行动

专门针对您的用例:

$dates    = array();
$start    = new DateTime($_POST['date1']);
$end      = new DateTime($_POST['date2']);
$interval = new DateInterval('P1D');
$period   = new DatePeriod($start, $interval, $end);

foreach ($period as $dt)
{
    $dates[] = $dt->format("Y-m-d");
}
于 2013-09-25T02:54:58.430 回答
1

试试这个,我想我是几年前从 php.net 得到的,抱歉没有更好的参考链接......

function dates_array($start, $end) {
    $range = array();   

    if (is_string($start) === true) $start = strtotime($start);
    if (is_string($end) === true )  $end = strtotime($end);

    do {
        $range[] = date('Y-m-d', $start);
        $start = strtotime("+ 1 day", $start);
    }
    while($start <= $end);

    return $range;
}
于 2013-09-25T02:51:36.817 回答