我需要找到本周的周一的日期。我怎样才能在PHP 4中做到这一点?获取本周的周一在PHP 4的日期
回答
echo date('Y-m-d', strtotime('previous monday'));
虽然只有一个说明。你想确保今天不是星期一,否则你会得到日期以前的星期一,就像它说的那样。可以按如下步骤
if (date('w') == 1)
{
// today is monday
}
else
{
// find last monday
}
如果今天是星期一,则给出一个星期前的日期。 – nickf 2010-06-02 14:01:35
@nickf:查看更新后的答案。我记得,在我发布后.. :) – 2010-06-02 14:03:37
小心你与strtotime一起使用的语言,“上一个星期一”在一周前会在星期一到达,当你真的想要这一天。 IIRC,这周在PHP中意味着星期一到星期日,但是如果你想用你的答案找到星期二的日期,那么这会在星期一和星期二给你错误的结果。 – 2010-06-02 14:04:39
我尝试:
<?php
$weekday = date("w") - 1;
if ($weekday < 0)
{
$weekday += 7;
}
echo "Monday this week : ", date("Y-m-d",time() - $weekday * 86400) , "\n";
?>
试试这个。
echo date('Y-m-d', strtotime('last monday', strtotime('next monday')));
如果今天是星期一,它将返回当前日期,否则将返回上一个星期一。至少它在我的PHP 5.2.4的en_US语言环境下。
$thisMonday = date('l, F d, Y', time() - ((date('w')-1) * 86400));
编辑:解释
date('w')
是一周中的天(0 =周日,6 =星期六)的数字表示- 有86400秒一天
- 我们采取当前时间,并减去(一天*(星期几 - 1))
因此,如果当前周三(3日),星期一是两天前:
time() - (86400 * (3 - 1))
= time() - 86400 * 2
如果是周一(1日),我们得到:
time() - (86400 * (1 - 1))
= time() - 86400 * 0
= time()
如果是星期日(第0天),星期一是明天。
time() - (86400 * (0 - 1))
= time() - -86400
= time() + 86400
Easisest方式:
$time = strtotime('monday this week');
哈!当他们[说](http://php.net/manual/en/function.strtotime.php)“将任何英文文本日期时间描述解析为Unix时间戳记”时,他们真的是这个意思,不是吗?对大多数可读的解 – 2010-11-03 13:33:56
+1!真是简单的解决方案。很高兴我搜索了这个,因为我已经建立了一些精心制作的工程来确定星期一的日期。尽管错字:'strotime'应该是'strtotime'。 – Alec 2011-09-11 23:19:08
今天是星期四2012/05/17(Y-m-d),当我回声(日期('Y-m-d',strtotime('星期一这周')));它是2012/05/21,这是下周一的星期一 – r4ccoon 2012-05-17 04:35:24
试试这个
$day_of_week = date("N") - 1;
$monday_time = strtotime("-$day_of_week days");
我真的觉得你有在PHP4工作,因为PHP5的日期功能* waaaay *更好。另外PHP4已经正式停止使用了一段时间了,所以它不会再有任何补丁,它可能是不安全的 - 它不应该再用于生产中。 – Spudley 2010-11-03 13:36:16