从php中的Unix时间戳获取周数和年份

时间:2012-09-04 16:21:41

标签: php

我正在尝试创建一个允许用户提前或返回一周的每周日历。到目前为止,我有这个......

<?
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);
    $week_number = date("W", strtotime( $display_week_ts));
    $year = date("Y", strtotime( $display_week_ts));

echo $week_start.' '.$week_number.' '.$year;
?>

<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 type="submit" name="add_week" value="add_week" />
</td>
</form>
</tr>
</table>

后退和前进按钮工作得很好,$ week_start变量代表一周的第一个日期提前并按原样返回,但不管日期显示$ week_number和$ year显示为01和1970或36和1600。

我知道这一定与我尝试从$ display_week_ts中提取它们的方式有关但我不知道是什么

2 个答案:

答案 0 :(得分:2)

以下内容不合适:

$week_start = date('d-m-Y', $display_week_ts);
$week_number = date("W", strtotime( $display_week_ts));
$year = date("Y", strtotime( $display_week_ts));

了解您如何在第一个语句中使用$display_week_ts,但对于其他(和类似的)语句,您将该时间戳包装在对strtotime()的调用中,并返回false }。

最好放弃strtotime()并按原样使用变量:

$week_number = date("W", $display_week_ts);
$year = date("Y", $display_week_ts);

答案 1 :(得分:0)

好的,修好了,我需要从$ week_start获取周数和年份