此函数返回两个日期之间的日期数组。
现在它完全可以正常工作,除了一些未知的原因,如果我把它放在十一月或三月作为参数,我得到的数组少了一天。其他几个月工作完全正常。我完全没有头绪。
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);
确保显示的日期与您输入的日期相同。很有可能,事实并非如此。