检查两个日期之间的日期错误,无能为力

时间:2012-04-19 21:39:54

标签: php

此函数返回两个日期之间的日期数组。

现在它完全正常,除了一些未知的原因,如果我把它作为11月或3月作为参数,我得到的数组少了一天。其他几个月工作完全没问题。我绝对无能为力。

function getListofDatesInRange2($fromDate, $toDate)
{
    $fromDate = str_replace("-","/", $fromDate);
    $toDate = str_replace("-","/", $toDate);

    $dateMonthYearArr = array();
    $fromDateTS = strtotime($fromDate);
    $toDateTS = strtotime($toDate);

    for ($currentDateTS = $fromDateTS; $currentDateTS <= $toDateTS; $currentDateTS += (60 * 60 * 24)) {
        $currentDateStr = date("m-d-Y",$currentDateTS);
        $dateMonthYearArr[] = $currentDateStr;
    }

return $dateMonthYearArr;
}

我记录了它,而一个while循环解决了我的问题。 (虽然我不知道首先是什么问题)

function getListofDatesInRange2($fromDate, $toDate)
{
$fromDate = str_replace("-","/", $fromDate);
$toDate = str_replace("-","/", $toDate);

$dateMonthYearArr = array();
$fromDateTS = strtotime($fromDate);
$toDateTS = strtotime($toDate);

array_push($dateMonthYearArr, date('m-d-Y', $fromDateTS));
while($fromDateTS < $toDateTS) {
    $fromDateTS += 86400;
    array_push($dateMonthYearArr, date('m-d-Y', $fromDateTS));
}
return $dateMonthYearArr;

}

1 个答案:

答案 0 :(得分:1)

几乎可以肯定,这是由多年前的一些人提出的,他们认为这一天应该在一个月和一年之间进行,而不是一些逻辑上的结束(大多数计算中的大端,英国英语中的小端)。

相反,请在输入YYYY-mm-dd之前将输入日期设置为strtotime格式。这将确保您始终能够获得正确的约会。

要测试这确实是您的问题,请尝试:

$fromDateTS = strtotime($fromDate);
echo date("m-d-Y",$fromDateTS);

确保显示的日期与您输入的日期相同。可能是,它不是。