给定一组日期时间,获取每个月的第一个星期一。

3

我需要什么

我有一个日期时间列表,想要获取每个日期时间的第一个星期一。

例如:假设给定的日期时间为

 2013-07-05 2013-08-05, 2013-09-13 etc.

我希望能够获取这些日期时间中的第一个星期一,以便输出结果为:
 2013-07-01, 2013-08-05, 2013-09-02 respectively

我在使用 strftime 时遇到了困难。

strftime("%d/%m/%Y", strtotime("first Monday of July 2012"));

1
请告诉我为什么这个问题被投票标记为离题,这样我就能确保自己不再犯同样的错误了。 - Avinash
我没有给你投反对票,但是无论谁为什么这样做,都是因为“要求代码的问题必须展示对所解决问题的最基本理解。包括尝试过的解决方案、为何不起作用以及预期结果。另请参阅:Stack Overflow问题清单”,他也标记了关闭。请注意加粗的部分。 - Prix
1
在 Stack Overflow 上有很多类似的问题。你可以看一下右边的“相关”栏目。在提问之前,你应该使用搜索功能(页面顶部右侧)。当你创建一个问题时,系统也会显示与之相似的问题。 - Sverri M. Olsen
你是指月份的第一天吗?2013-09-13 => 2013-09-02 - srain
好的,我明白了。试试我的代码,希望那是你想要的。 - srain
5个回答

10
使用PHP的Datetime类:
$Dates = array('2013-07-02', '2013-08-05', '2013-09-13');
foreach ($Dates as $Date)
{
    $test = new DateTime($Date);
    echo $test->modify('first monday')->format('Y-m-d');
}

5
这其实不是这个问题的正确答案。$test->modify('first monday'); 会将DateTime对象更新为下一个星期一。在某些情况下,你可能会得到下个月的星期一。修改DateTime对象的正确方法是这样的: $test->modify('本月第一个星期一') - Casper André Casse

0
<?php
function find_the_first_monday($date)
{
    $time = strtotime($date);
    $year = date('Y', $time);
    $month = date('m', $time);

    for($day = 1; $day <= 31; $day++)
    {
        $time = mktime(0, 0, 0, $month, $day, $year);
        if (date('N', $time) == 1)
        {
            return date('Y-m-d', $time);
        }
    }
}

echo find_the_first_monday('2013-07-05'), "\n";
echo find_the_first_monday('2013-08-05'), "\n";
echo find_the_first_monday('2013-09-13'), "\n";

// output:
// 2013-07-01
// 2013-08-05
// 2013-09-02

0

0

我知道这是一个老问题,我的答案并不是这个问题的100%解决方案,但这可能对某些人有用,这将给出“给定年/月的第一个星期六”:

date("Y-m-d", strtotime("First Saturday of 2021-08")); // gives: 2021-08-07

您可以以多种方式进行操作。

显然,您可以输入“年-月的第二个星期六”,它也会找到。

适用于PHP 5.3.0及以上版本(在https://sandbox.onlinephpfunctions.com/上测试过)。


-1
你可以遍历日期数组,然后在第一次遇到星期一时跳出循环并返回$Date

PHPFIDDLE

$Dates = array('2013-07-02', '2013-08-05', '2013-09-13');

foreach ($Dates as $Date)
{
    $weekday = date('l', strtotime($Date));
    if($weekday == 'Monday') { 
        echo "First Monday in list is - " . $Date;
        break; 
    }
}

输出

列表中的第一个星期一是-2013年8月5日


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