首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP获取月份的周数

PHP获取月份的周数
EN

Stack Overflow用户
提问于 2011-05-02 12:07:53
回答 27查看 72.9K关注 0票数 35

因此,我有一个返回特定月份和年份的周数的脚本。如何从该月中选择特定的一天,并确定它是该月的第1、2、3、4或5周的一部分吗?

EN

回答 27

Stack Overflow用户

回答已采纳

发布于 2011-05-02 13:41:38

这是我尝试过的最令人沮丧的事情--但它就在这里!

代码语言:javascript
复制
<?php

    /**
     * Returns the amount of weeks into the month a date is
     * @param $date a YYYY-MM-DD formatted date
     * @param $rollover The day on which the week rolls over
     */
    function getWeeks($date, $rollover)
    {
        $cut = substr($date, 0, 8);
        $daylen = 86400;

        $timestamp = strtotime($date);
        $first = strtotime($cut . "00");
        $elapsed = ($timestamp - $first) / $daylen;

        $weeks = 1;

        for ($i = 1; $i <= $elapsed; $i++)
        {
            $dayfind = $cut . (strlen($i) < 2 ? '0' . $i : $i);
            $daytimestamp = strtotime($dayfind);

            $day = strtolower(date("l", $daytimestamp));

            if($day == strtolower($rollover))  $weeks ++;
        }

        return $weeks;
    }


    //
    echo getWeeks("2011-06-11", "sunday"); //outputs 2, for the second week of the month
?>
票数 48
EN

Stack Overflow用户

发布于 2012-11-01 04:51:32

编辑:这就是“单行”所需的变量,以避免与条件的重新计算。当我在它的时候抛出了一个默认的参数。

代码语言:javascript
复制
function weekOfMonth($when = null) {
    if ($when === null) $when = time();
    $week = date('W', $when); // note that ISO weeks start on Monday
    $firstWeekOfMonth = date('W', strtotime(date('Y-m-01', $when)));
    return 1 + ($week < $firstWeekOfMonth ? $week : $week - $firstWeekOfMonth);
}

请注意,weekOfMonth(strtotime('Oct 31, 2011'));将返回6;一些罕见的月份有6周,这与OP的预期相反。2017年1月是另一个具有6个ISO周的月份-周日是去年一周的第一个秋季,因为ISO周从周一开始。

对于starshine531,要返回0索引的当月周,请将return 1 +更改为return 0 +return (int)

对于Justin Stayton,从周日而不是周一开始的几周内,我会使用strftime('%U'而不是date('W',如下所示:

代码语言:javascript
复制
function weekOfMonth($when = null) {
    if ($when === null) $when = time();
    $week = strftime('%U', $when); // weeks start on Sunday
    $firstWeekOfMonth = strftime('%U', strtotime(date('Y-m-01', $when)));
    return 1 + ($week < $firstWeekOfMonth ? $week : $week - $firstWeekOfMonth);
}

对于此版本,2017-04-30现在是4月的第6周,而2017-01-31现在是第5周。

票数 25
EN

Stack Overflow用户

发布于 2012-07-19 02:59:03

代码语言:javascript
复制
public function getWeeks($timestamp)
{
    $maxday    = date("t",$timestamp);
    $thismonth = getdate($timestamp);
    $timeStamp = mktime(0,0,0,$thismonth['mon'],1,$thismonth['year']);    //Create time stamp of the first day from the give date.
    $startday  = date('w',$timeStamp);    //get first day of the given month
    $day = $thismonth['mday'];
    $weeks = 0;
    $week_num = 0;

    for ($i=0; $i<($maxday+$startday); $i++) {
        if(($i % 7) == 0){
            $weeks++;
        }
        if($day == ($i - $startday + 1)){
            $week_num = $weeks;
        }
      }     
    return $week_num;
}

大家好,我已经挣扎了一整天,试图弄清楚这段代码,我终于弄明白了,所以我想我应该和大家分享一下。

您所需要做的就是在函数中添加一个时间戳,它会将星期数返回给您。

谢谢

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5853380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档