0

如何获得给定周数的第一周?我正在用 PHP 为日历应用程序制作一个函数。

这个想法:当我点击一个基本上使用 +1 个月的 strtotime 的链接时,它当然只会跳转到同一天。我需要得到正确的周数。

示例:当我使用菜单从 8 月移动到 9 月时,它不应该选择我在 8 月所在的同一日期,而是选择 9 月第一周的第一天(9 月 2 日星期一,第 36 周) .

从 9 月到 10 月:第 40 周,10 月 1 日星期二。

4

3 回答 3

3

我找到了一个和你想要的完全一样的功能。这是setISODate

$date = new DateTime();
$date->setISODate(2013, 35, 1);
echo $date->format('Y-m-d');

您可以根据需要更改Y-m-d日期格式

输出

2013-08-26 // This week number and monday

用法

setISODate(year, week, day)
于 2013-08-29T11:08:40.220 回答
0

正如every1 所说,ISO 周从星期一开始。引自http://en.wikipedia.org/wiki/ISO_week_dateWeeks start with Monday.

如果我正确理解您的问题,如果所选周在 2 个不同的月份,您需要下个月的 first-next-date 吗?

function getFirstWeekDay($year, $week) {
    $dt = (new DateTime)->setISODate($year, $week, 1);
    $dtC = clone $dt;
    for ($N = $dt->format('N'); $N < 7; $N++) {
        $dtC->modify('+1 day');
        if ($dt->format('m') !== $dtC->format('m')) {
            return $dtC;
        }
    }
    return $dt;
}

echo getFirstWeekDay(2013, 40)->format('W\t\h \w\e\e\k \i\s Y-m-d'); 
# 40th week is 2013-10-01

echo getFirstWeekDay(2013, 1)->format('W\t\h \w\e\e\k \i\s Y-m-d'); 
# 1th week is 2013-01-01
于 2013-08-29T13:23:47.743 回答
0

试试这个代码

<?php
        $week = 3;
        $year = 2009;

        $timestamp = mktime( 0, 0, 0, 1, 1,  $year ) + ( $week * 7 * 24 * 60 * 60 );
        $timestamp_for_monday = $timestamp - 86400 * ( date( 'N', $timestamp ) - 1 );
        $date_for_monday = date( 'Y-m-d', $timestamp_for_monday );
?>
于 2013-08-29T09:37:22.560 回答