簡體   English   中英

在PHP中獲取給定周數的第一周日

[英]Get the first week day in a given week number in PHP

如何獲得給定周數中的第一個工作日? 我正在用PHP開發日歷應用程序的功能。

想法:當我單擊一個基本上使用+1個月的strtotime的鏈接時,它只會跳轉到課程的同一天。 我需要得到正確的星期數。

示例:當我使用菜單從8月移到9月時,它不應該選擇與8月相同的日期,而是選擇9月的第一個星期的第一天(9月2日,星期一,第36周) 。

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

我發現了一個完全像您想要的功能。 這是setISODate

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

您可以根據Ymd更改Ymd日期格式

輸出量

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

用法

setISODate(year, week, day)

試試這個代碼

<?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 );
?>

就像每一個已經說過的那樣,ISO周從星期一開始。 引用自http://en.wikipedia.org/wiki/ISO_week_dateWeeks start with Monday.Weeks start with Monday.

如果我正確地理解了您的問題,那么如果選定的一周是2個不同的月份,那么您需要下個月的初次約會嗎?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM