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,使其在不同的日子中循环