你知道这个问题是看代码是什么?
我会很高兴,如果你帮了我:
list($from_day,$from_month,$from_year) = explode(".","27.09.2012");
list($until_day,$until_month,$until_year) = explode(".","31.10.2012");
$iDateFrom = mktime(0,0,0,$from_month,$from_day,$from_year);
$iDateTo = mktime(0,0,0,$until_month,$until_day,$until_year);
while ($iDateFrom <= $iDateTo) {
print date('d.m.Y',$iDateFrom)."<br><br>";
$iDateFrom += 86400;
}
写了同样的问题2倍的日期
十月(31)在历史上写2次平末端10月30日:(
2012年9月27日
2012年9月28日
...
2012年10月26日
2012年10月27日
[[2012年10月28日]]
[[2012年10月28日]]
2012年10月29日
二零一二年十月三十日
- 你的问题是因为你设置的时间为00:00:00,将其设置为12:00:00。 这是因为夏令时 。
- 停止使用日期()函数,使用日期和时间类。
溶液(PHP> = 5.4):
$p = new DatePeriod(
new DateTime('2012-09-27'),
new DateInterval('P1D'),
(new DateTime('2012-10-31'))->modify('+1 day')
);
foreach ($p as $d) {
echo $d->format('d.m.Y') . "\n";
}
溶液(PHP <5.4)
$end = new DateTime('2012-10-31');
$end->modify('+1 day');
$p = new DatePeriod(
new DateTime('2012-09-27'),
new DateInterval('P1D'),
$end
);
foreach ($p as $d) {
echo $d->format('d.m.Y') . "\n";
}
你有日光节约时间的问题。 从一个时间戳添加秒到另一个是容易围绕这些各种各样的边界条件问题(闰日可问题是很好),你应该在使用PHP的DateTime和DateInterval对象的习惯。 它与日期易如反掌工作。
$start_date = new DateTime('2012-09-27');
$end_date = new DateTime('2012-10-31');
$current_date = clone $start_date;
$date_interval = new DateInterval('P1D');
while ($current_date < $end_date) {
// your logic here
$current_date->add($date_interval);
}
我的解决,这将是这样的想法;
$firstDate = "27.09.2012";
$secondDate = "31.10.2012";
$daysDifference = (strtotime($secondDate) - strtotime($firstDate)) / (60 * 60 * 24);
$daysDifference = round($daysDifference);
for ($i = 0; $i <= $daysDifference; $i++)
{
echo date("d.m.Y", strtotime('+'.$i.' day', strtotime($firstDate))) . "<BR>";
}
这应该解决您的问题,并更易于阅读(恕我直言) 我刚刚测试的代码,它输出的所有日期,没有双打。 它还保存你所有的夏令不一致。
我不知道你来自哪里,但很可能你打你的时区夏令时转换(这是11月4我住的地方 - 10月28后正好一周)。 你不能靠天确切地说是86400秒长。
如果循环使用mktime递增,你应该罚款:
list($from_day,$from_month,$from_year) = explode(".","27.09.2012");
list($until_day,$until_month,$until_year) = explode(".","31.10.2012");
$iDateFrom = mktime(0,0,0,$from_month,$from_day,$from_year);
$iDateTo = mktime(0,0,0,$until_month,$until_day,$until_year);
while ($iDateFrom <= $iDateTo)
{
print date('d.m.Y',$iDateFrom)."<br><br>";
$from_day = $from_day + 1;
$iDateFrom = mktime(0,0,0,$from_month,$from_day,$from_year);
}
尽管$from_day
很可能会超过31顺利,mktime会为你的数学转换。 (即32天在一个31天的月份=下个月的第1天)
编辑:对不起,我错了地方的增量。