繁体   English   中英

PHP 8天创建一周

[英]php 8 days created for week

我有以下代码创建一个范围之间的日期列表。 如果我提供星期几,它将获得该范围内所有日期的所有日期。 如果我不这样做,它将整天。

我的问题是,从10月24日到29日,它会返回额外的一天。 当我添加额外的代码以获取星期几的日期时,我注意到了。

我认为问题行是array_push($ aryRange,date('Ym-d',$ iDateFrom)); //第一个条目

function createDateRangeArray($strDateFrom,$strDateTo,$dateOfWeek=null) {
  // takes two dates formatted as YYYY-MM-DD and creates an
  // inclusive array of the dates between the from and to dates.

  // could test validity of dates here but I'm already doing
  // that in the main script

  $aryRange=array();

  $iDateFrom=mktime(1,0,0,substr($strDateFrom,5,2),substr($strDateFrom,8,2),substr($strDateFrom,0,4));
  $iDateTo=mktime(1,0,0,substr($strDateTo,5,2),substr($strDateTo,8,2),substr($strDateTo,0,4));

  if ($iDateTo>=$iDateFrom) {

    if(!isset($dateOfWeek)) {   
        array_push($aryRange,date('Y-m-d',$iDateFrom)); // first entry

        while ($iDateFrom<$iDateTo) {
          $iDateFrom+=86400; // add 24 hours
          array_push($aryRange,date('Y-m-d',$iDateFrom));
        }
    } else {

        while ($iDateFrom<$iDateTo) {
          if(date('w',$iDateFrom)==$dateOfWeek)
              array_push($aryRange,date('Y-m-d',$iDateFrom));
              $iDateFrom+=86400; // add 24 hours
        }       
    }
  }

  if(count($aryRange)<1){
    return false;
  } else{
    return $aryRange;
  }

}

使用strtotime()函数会更简单吗? http://php.net/manual/en/function.strtotime.php

$iDateFrom = strtotime("+1 day", $iDateFrom); // add 1 day

您必须考虑daylight saving time

-> http://en.wikipedia.org/wiki/Daylight_saving_time

您每次要增加24小时。 这与增加一天并不完全相同。 我强烈怀疑您所处的时区是10月23日或10月30日的时钟,这会弄乱您的计算。

对我来说,目前尚不清楚什么是最适合您的解决方案,但希望能说明发生的事情将是一个好的开始...

快速而肮脏的解决方案是在要比较的日期上添加几个小时的时差。 这样,夏时制不会影响到足以使计算中断的时间。

$iDateFrom=mktime(12,0,0,substr($strDateFrom,5,2),substr($strDateFrom,8,2),substr($strDateFrom,0,4));
$iDateTo=mktime(1,0,0,substr($strDateTo,5,2),substr($strDateTo,8,2),substr($strDateTo,0,4));

更好的解决方案是使用实际的日期处理功能,而不是手动添加24小时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM