如何在PHP中查找当前月份的日期编号

8
今天的日期是2014年1月27日,所以我使用以下函数获取星期几名称:
$t=date('d-m-Y');
$day = strtolower(date("D",strtotime($t)));

现在日期的名称是mon

如何确定这个星期一是本月的第四个星期一? 换句话说,我想找到一个月中特定一天(如星期一)的第1、2、3、4个实例?


5
基础数学:floor(($dayNumber - 1) / 7) + 1。意思是将给定的$dayNumber减1再除以7,向下取整后加1,得到一个整数作为结果。 - Jon
感谢 @Oliver M Grech 的编辑,很抱歉我的英语不好。 - DS9
没关系,我们都能理解和尊重其他人 :) 最重要的是其他人能够理解你的帖子,这样他们才能帮助你 :) Wim 的编辑比我的好,很高兴他的编辑通过了 :) - Oliver M Grech
@DS9:我已经读了3到4遍这个问题,但仍然不明白你想要实现什么。你是想找到:a)一个月中第一/第二/第三个星期一/星期二/...的日期吗?b)给定日期数字的日期名称,即将27-01-2014转换为星期一?c)...还有其他什么?请编辑您的问题并解释您想要实现什么。 - Amal Murali
抱歉,我删除了之前的评论,因为它与DS9无关。答案如下。谢谢,祝好运。 - Oliver M Grech
显示剩余2条评论
3个回答

10

数学部分的功劳归功于Jon(上面)

结合你的代码,完整的解决方案可以如下实现

$t=date('d-m-Y');
$dayName = strtolower(date("D",strtotime($t)));
$dayNum = strtolower(date("d",strtotime($t)));
echo floor(($dayNum - 1) / 7) + 1

或者作为带有可选日期的函数

PHP Fiddle 在这里

这只是返回您请求的数字。

function dayNumber($date=''){
    if($date==''){
        $t=date('d-m-Y');
    } else {
        $t=date('d-m-Y',strtotime($date));
    }

    $dayName = strtolower(date("D",strtotime($t)));
    $dayNum = strtolower(date("d",strtotime($t)));
    $return = floor(($dayNum - 1) / 7) + 1;
    return $return;
}


echo dayNumber('2014-01-27');

1
感谢 @Oliver M Grech。 - DS9
欢迎,伙计... 如果你需要进一步的帮助,请转发这个问题,我会很乐意帮忙。谢谢。 - Oliver M Grech

2
$date = mktime(0, 0, 0, 1, 27, 2014);
$dayNumber = date("d", $date);
$dayOfWeek = date("l", $date);
$dayPosition = (floor(($dayNumber - 1) / 7) + 1);

switch ($dayPosition) {
    case 1:
        $suffix = 'st';
        break;
    case 2:
        $suffix = 'nd';
        break;
    case 3:
        $suffix = 'rd';
        break;
    default:
        $suffix = 'th';
}

echo "Today is the " . $dayPosition . $suffix . " " . $dayOfWeek . " of the month.";
// Will echo: Today is the 4th Monday of the month.

感谢 @Jon 提供的数学计算。

你能否解释一下为什么要使用 mktime 而不是直接使用 date(d-m-Y) - DS9
因为使用 $dayNumber = date("d", $date); 时,$date 必须是一个时间戳。 - MrUpsidown
当然,如果你只需要当前日期,那么你可以使用 $dayNumber = date("d"); $dayOfWeek = date("l");,不必使用 mktime。 - MrUpsidown

2

这篇文章对现有答案进行了一些改进。

获取当前星期几,简单易行:

echo date("N", time());

给定日期的星期几:

//$date in d-m-Y, modify for your needs
function dayNumber($date = null)     
{
    $date = $date ?? date('d-m-Y');
    $date = DateTime::createFromFormat('d-m-Y', $date);
    return $date->format("N");
}


echo dayNumber('24-12-2020');

我正在使用空值合并运算符(PHP 7.0及以上版本)和DateTime类和函数(PHP 5.3.0及以上版本)。

我会避免使用strtotime(),因为可能存在时区问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接