我有一定的日期时间列表。我希望得到每个日期时间的第一个星期一。
例如:假设给定的日期时间是
2013-07-05 2013-08-05, 2013-09-13 etc.
我希望获得所有这些日期时间的第一个星期一,以便输出结果为
2013-07-01, 2013-08-05, 2013-09-02 respectively
我实际上是使用stftime
来解决这个问题。
strftime("%d/%m/%Y", strtotime("first Monday of July 2012"));
答案 0 :(得分:8)
使用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');
}
答案 1 :(得分: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
答案 2 :(得分:0)
第一个星期一将在一个月的前7天内,
DAYOFWEEK(date)
返回1 =星期日,2 =星期一,依此类推
也看到了#23的黑客攻击 http://oreilly.com/catalog/sqlhks/chapter/ch04.pdf
答案 3 :(得分:0)
我知道这是一个老问题,我的回答不是这个问题的 100% 解决方案,但这对某人可能有用,这将给出“给定年/月的第一个星期六”:
date("Y-m-d", strtotime("First Saturday of 2021-08")); // gives: 2021-08-07
您可以通过多种方式进行操作。
显然你可以输入“年月的第二个星期六”,它也会找到。
适用于 PHP 5.3.0 及更高版本(在 https://sandbox.onlinephpfunctions.com/ 测试)。
答案 4 :(得分:-1)
您可以遍历日期数组,然后在第一次遇到星期一时退出循环并返回$Date
$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;
}
}
输出
First Monday in list is - 2013-08-05