date():每月第一周的第一个星期一?

时间:2019-08-12 15:21:12

标签: php

我实际上是在尝试建立带有“戳记”界面的月度奖励系统。 为此,我想使用一个HTML表格,从星期一开始,单元格= 1天。

这是我的问题(解决方案可能很容易找到!):星期一不是一个月的第一天-至少不是整个月。如何要求strtotime()和date()显示日期的Y-m-d:

  • “每月的第一周的星期一”?

  • “一个月的最后一周的星期日”?

我希望在2019-08年获得这样的结果:

  • 2019-07-29

  • 2019-09-01

我没有在PHP文档中找到它,但是有没有办法在date()上放置第三个参数来设置日期?

像那样,我可以做这样的事情:

date('Y-m-d', strtotime('monday'), '2019-08-01');

编辑:

基于@Vidal的答案,这是我尝试的,但是我得到了一个奇怪的PHP反应:

$first_date = date("Y-m-d", strtotime("first monday 2019-08 - 7 days"));
$last_date = date("Y-m-d", strtotime("last sunday 2019-09"));
$last_date2 = date("Y-m-d", strtotime("last sunday 2019-09 + 7 days"));
echo $first_date; ?><br>
echo $last_date; ?><br>
echo $last_date2; ?><br>

输出:

2019-07-29
2019-08-25
2019-09-08

我不知道为什么。您是否还注意到我需要将$ last_date和$ last_date2设置为2019-09而不是2019-08吗?

3 个答案:

答案 0 :(得分:3)

循环显示年,月。

echo date("j, d-M-Y", strtotime("first monday of 2019-08"));
echo date("j, d-M-Y", strtotime("last sunday of 2019-08"));      

希望有帮助。

PHP Reference

答案 1 :(得分:2)

我认为最好使用DateTime对象。

/* 
I'm expecting result like this for 2019-08 :
"monday of first week of month" => 2019-07-29
"sunday of last week of month" => 2019-09-01
*/
$month = "2019-08";
$date = date_create($month."-02")
  ->modify("last Monday")
  ->format('l, d-m-Y')
;
echo $date."<br>";

$date = date_create("last Day of ".$month)
  ->modify("-1 Day")
  ->modify("next Sunday")
  ->format('l, d-m-Y')
;
echo $date."<br>";

/* Output
Monday, 29-07-2019
Sunday, 01-09-2019
*/

答案 2 :(得分:1)

通过更改代码中的某些内容,我设法使它起作用:

1)如果第一个星期一> 2并且<= 7,则必须删除7天才能实际获得第一个星期一

2)我在另一行代码中添加了“ + 7天”。如果我有“ XXXX-XX的最后一个星期日+ 7天”,这没有用

3)为了根据您想要的输出获得最后一个星期日,我将一个月的最后一个星期日与该月的总天数进行了比较-7。如果大于(例如25),则表示不是最后一个星期日

$year = 2019;
$month = 8;

if($month < 10)
    $month = "0" . $month;
$currentDate = $year . "-" . $month;

if(date("d", strtotime("first monday of " . $currentDate)) > 2 && date("d", strtotime("first monday of " . $currentDate)) <= 7) 
    $first_date = date("Y-m-d", strtotime("first monday of " . $currentDate . " -7 days"));
else
    $first_date = date("Y-m-d", strtotime("first monday of " . $currentDate));
if(date("d",strtotime("last sunday of " . $currentDate)) > date('t') - 7)
{
    $last_date = date("Y-m-d", strtotime("last sunday of " . $currentDate));
    $last_date = date("Y-m-d",strtotime($last_date . " +7 days")); //working when you add days like that. doesn't work if I put + 7 days in the 'last sunday of'...
}
else
    $last_date = date("Y-m-d", strtotime("last sunday of " . $currentDate));
echo $first_date . "<br>";
echo $last_date . "<br>";