0

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

现在它工作得很好,除了一些未知的原因,如果我把它放在 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;

}

4

1 回答 1

1

几乎可以肯定,这是由许多年前的某个傻瓜造成的,他们决定将日期放在月份和年份之间,而不是某种逻辑字节序(大多数计算中的大端序,英式英语中的小端序)。

取而代之的是,在输入日期YYYY-mm-dd之前将其输入格式strtotime。这将确保您始终获得正确的日期。

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

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

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

于 2012-04-19T21:45:51.027 回答