Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 提前每周日历一周_Php - Fatal编程技术网

Php 提前每周日历一周

Php 提前每周日历一周,php,Php,可能重复: 我正在尝试编写一个脚本,它将在表中显示一周中的几天,如果单击按钮,它将提前一周。我已经设法让它工作到年底,然后日期都出错。他就是我现在所拥有的 <? if(isset($_POST['add_week'])){ $week = date('d-m-Y', strtotime($_POST['last_week'])); $new_week = strtotime ( '+1 week' , strtotime ( $week ) ) ;

可能重复:

我正在尝试编写一个脚本,它将在表中显示一周中的几天,如果单击按钮,它将提前一周。我已经设法让它工作到年底,然后日期都出错。他就是我现在所拥有的

 <?
     if(isset($_POST['add_week'])){
     $week = date('d-m-Y', strtotime($_POST['last_week']));
     $new_week =  strtotime ( '+1 week' , strtotime ( $week ) ) ;
     $new_week = date('d-m-Y', $new_week);

     $week_number = date("W", strtotime( $new_week));
     $year = date("Y", strtotime( $new_week));
  }else{

         $week_number = date("W");
         $year = date("Y");
  }

  if($week_number < 10){
      $week_number = "0".$week_number;
   }

  $week_start = date('d-m-Y', strtotime($year."W".$week_number,0));
 echo $week.' '.$new_week.' '.$week_number;
?>

<table name="week">
<tr>
        <?
            for($day=1; $day<=7; $day++)
  {
echo '<td>';
    echo date('d-m-Y', strtotime($year."W".$week_number.$day))." | \n";
echo '</td>';
  }
?>
</tr>
<tr>
 <form name="move_weeks" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
 <input type="hidden" name="last_week" value="<? echo $week_start; ?>" />
  <td colspan="7"><input type="submit" name="back_week" value="back_week" />
 <input ype="submit" name="add_week" value="add_week" />
</td>
</form>
</tr>
</table>


在我看来,基于unix时间戳值进行所有计算,然后仅根据输出需要将其转换为字符串,这将更好地为您服务。这样,您就不必处理周数问题(即第0周),也不必将周一作为每周的第一天(因为这是
date(“W”)
)中的计算基础),您也不必进行大量的破解来查找边缘条件

因此,假设
$\u POST['last\u week']
采用d-m-Y格式,如下所示:

if(isset($_POST['add_week'])){
     $last_week_ts = strtotime($_POST['last_week']);
     $display_week_ts = $last_week_ts + (3600 * 24 * 7);
} else if (isset($_POST['back_week'])) {
     $last_week_ts = strtotime($_POST['last_week']);
     $display_week_ts = $last_week_ts - (3600 * 24 * 7);
} else {
    $display_week_ts = floor(time() / (3600 * 24)) * 3600 * 24;
}

$week_start = date('d-m-Y', $display_week_ts);
for ($i = 0; $i < 7; $i++) {
    $current_day_ts = $display_week_ts + ($i * 3600 *24);
    echo date('d-m-Y', $current_day_ts); 
}
对于在一周中循环显示的部分,可以使用以下内容:

if(isset($_POST['add_week'])){
     $last_week_ts = strtotime($_POST['last_week']);
     $display_week_ts = $last_week_ts + (3600 * 24 * 7);
} else if (isset($_POST['back_week'])) {
     $last_week_ts = strtotime($_POST['last_week']);
     $display_week_ts = $last_week_ts - (3600 * 24 * 7);
} else {
    $display_week_ts = floor(time() / (3600 * 24)) * 3600 * 24;
}

$week_start = date('d-m-Y', $display_week_ts);
for ($i = 0; $i < 7; $i++) {
    $current_day_ts = $display_week_ts + ($i * 3600 *24);
    echo date('d-m-Y', $current_day_ts); 
}
($i=0;$i<7;$i++)的
{
$current_day_ts=$display_week_ts+($i*3600*24);
回音日期('d-m-Y',$当前日期);
}

在年份中,如果($week\u number>$last\u week\u number)增加年份编号,则设置条件
。我很想帮你,但是约会操作让我头疼:))$_POST['last_week']是什么样子的?我已经为此挣扎了两天,所以我和你一起讨论头痛的问题。谢谢你们的帮助,我会试试的。我已经将问题回滚到它的原始版本,Netbeans快疯了,当尝试自动缩进代码时…:(与'add_week'相同,但使用'-1 week',我将使用现在添加的$u POST'back_week'来显示代码,谢谢,但是$display_week_ts=floor((now()/(3600*24))*3600*24;行出现语法错误?好的,我通过在24之后关闭括号来修复这个问题,但是现在我得到了对未定义函数now()的致命错误调用。)@user1267224对此表示抱歉。我用SQL术语思考:)。我已经修复了这一行,包括正确的闭括号(您不希望它在最后24个之后,因为您正在尝试获取当前日期的00:00时间戳。抱歉,我现在得到的是每天的01-01-1970 OK,我意识到这是我的错,我不确定如何转换回显日期('d-m-Y',strotime($year.”W.“$week\u number.$day))使用$display\u week\t,使其在不同的日子中循环