我实际上是在尝试建立带有“戳记”界面的月度奖励系统。 为此,我想使用一个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吗?
答案 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"));
希望有帮助。
答案 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>";