检查两个日期之间的日期错误,毫无头绪


Checking a date between two dates bug, clueless

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

现在它完全可以正常工作,除了一些未知的原因,如果我把它放在十一月或三月作为参数,我得到的数组少了一天。其他几个月工作完全正常。我完全没有头绪。

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;
}

重新编码了它,一段时间循环解决了我的问题。(虽然我不知道问题首先是什么)

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;

}

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

相反,请将您的输入日期放在YYYY-mm-dd格式中,然后再将它们放在strtotime 中。这将确保您始终获得正确的日期。

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

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

确保显示的日期与您输入的日期相同。很有可能,事实并非如此。