首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在PHP中将周名称与周天数相匹配

在PHP中将周名称与周天数相匹配
EN

Stack Overflow用户
提问于 2018-12-18 07:32:01
回答 2查看 98关注 0票数 0

我正在尝试用HTML,CSS和PHP制作一个日历。到目前为止,一切都很顺利。但最后,我发现我忘记了月份并不总是从星期一开始。

我该怎么做呢?我在PHP方面不是很强,也不知道我该怎么做。

以本月(12月)为例,我需要在前面添加5个“隐藏或禁用”天,以匹配12月1日是星期六。

代码语言:javascript
复制
<!-- Week Days -->
<ul class="weekdays">
    <li>Monday</li>
    <li>Tuesday</li>
    <li>Wednesday</li>
    <li>Thursday</li>
    <li>Friday</li>
    <li>Saturday</li>
    <li>Sunday</li>
</ul>
<!-- Days -->
<ul class="days"> 
<?php

    // Make List
    $list = array();
    $month = date('m', strtotime('-1 month'));
    $year = date('Y', strtotime('-1 year'));

    for($d = 1; $d <= 31; $d++){
        $time = mktime(12, 0, 0, $month, $d, $year);    

        if(date('m', $time) == $month)       
            $list[] = date('d', $time);
    }
    if(is_array($list) || is_object($list)){
        foreach($list as $day){

            if($day < date('d')){
                echo '<li class="passed"><span>' . $day . '</span></li>';
            }else if($day == date('d')){
                echo '<li class="current"><span>' . $day . '</span></li>';
            }else{
                echo '<li><span>' . $day . '</span></li>';
            }
        }
    }
?>
</ul>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-18 07:56:04

因此,根据您的示例,您实际上是在输出2017年11月的信息,该信息从一个星期三开始。

要实现您想要的结果,您只需找出是星期几,然后在需要填充月份的情况下将额外的“空”项添加到$list数组中。

要查找星期几,请使用:

代码语言:javascript
复制
... // Your existing code under Make List
$year = date('Y', strtotime('-1 year'));

$date = '01-' . $month . '-' . $year;
$dayofweek = date('w', strtotime($date));

现在$dayofweek将包含星期的数字,其中0表示星期天,1表示星期一,依此类推。

接下来,只需将空项添加到列表数组中,以填充应该为空的天数:

代码语言:javascript
复制
if ($dayofweek == 0) $dayofweek = 7;
for (; $dayofweek > 1; $dayofweek--)
    $list[] = '';

请注意,在开始日期是星期天的情况下,我将其更改为7,以导致填充6个框。

最后,在输出列表项时,只需为每个填充的日期添加一个空的日期<li>

代码语言:javascript
复制
... // Your existing code
foreach($list as $day){
    if ($day == '')
        echo '<li>Empty day</li>';
    else if($day < date('d')){
        ... // Your existing code continues
票数 1
EN

Stack Overflow用户

发布于 2018-12-18 08:35:07

对于这个示例,最简单的解决方案是根据日历周而不是天来重构代码。下面的代码应该可以帮助您做到这一点,但您需要完成代码的其余部分才能以您想要的方式显示它。

代码语言:javascript
复制
$currentMonth = date('m');
    $daysInMonth = date('t');
    $currentDay = 0;
    $firstOfMonthDay = date('w', strtotime('2017-01-01'));
    nextWeek = true;


    while(nextWeek){ // displays weekly fields
        counter = 1;
        while(counter <= 7){ // displays empty box or date
            formatBox();
            if($firstOfMonthDay == $counter){
                // starts printing date
                $currentDay++;
            }
            if($currentDay > 0 && $currentDay <= $daysInMonth){
                // prints date while the month has valid days
                printDay();
            }
            $currentDay++;
            counter++;
        }
        if($currentDay < $daysInMonth){
            // stops printing new weeks when there are no more valid
            // days in the month
            nextWeek = false;
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53824454

复制
相关文章

相似问题

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