在PHP 4中获取本周星期一的日期

18

我需要在当前的一周中找到星期一的日期。在PHP 4中怎么做?


1
我真的很同情你不得不在PHP4中工作,因为PHP5的日期功能要好得多。此外,PHP4已经正式终止生命周期一段时间了,所以它将不会再获得任何补丁,并且可能存在安全问题--无论如何,它都不应该再用于生产环境中。 - Spudley
8个回答

96

最简单的方法:

$time = strtotime('monday this week');

4
哈哈!当他们说“将任何英文日期时间描述解析为Unix时间戳”时,他们是真心的,不是吗?最易读的解决方案加1分。 - Matt Gibson
1
今天是星期四,日期为2012/05/17(Y-m-d)。当我执行echo(date('Y-m-d', strtotime('monday this week')));时,它会输出2012/05/21,也就是下周的星期一。 - r4ccoon
2
我觉得“本周一”实际上是指下周一.... “上周一”对我有效。 - Ezequiel
这将返回秒数,可以像这样包装它:date('Y-m-d', strtotime('monday this week')); - d.raev
1
下周一:echo date('Y-m-d', strtotime('next monday')); - user3162878
显示剩余3条评论

14

试试这个:

return strtotime('last monday', strtotime('next sunday'));

1
如果今天是星期天呢? :) - mr.b
@mr.b - 假设周日为一周的开始,它应该仍然按预期行动。 - nickf
这是我最喜欢的获取每周一00:00:00的解决方案。另一种(不太优雅的)方法是mktime(0,0,0,date('m'),date('j')-date('N')+1,date('Y')) - designosis

10
echo date('Y-m-d',time()+( 1 - date('w'))*24*3600);
下周计划:
echo date('Y-m-d',time()+( 8 - date('w'))*24*3600);

1代表周一,2代表周二,3代表周三,以此类推。试一试吧。


1代表星期一,2代表星期二,3代表星期三,以此类推 :) 试试看吧.. - apis17
2
如果你在星期天尝试这段代码,它将无法返回上个星期一! - ErcanE
@Royertan说得对!我正在使用dhtmlxSchedule,当今天是星期日时,上一个周一的数据就消失了,整个星期都没有了!有什么建议吗? - Waiyl Karim
@Waiyl Karim 这可能有帮助!$sunday = date('Y-m-d', strtotime('last Sunday')); $convertSunday = strtotime($sunday); $nextSunday = strtotime("+7 day", $convertSunday); - ErcanE

8
echo date('Y-m-d', strtotime('previous monday'));

仅有一点需要注意。你需要确保今天不是星期一,否则你会得到上一个星期一的日期,就像它所说的那样。你可以按照以下方式进行操作:

if (date('w') == 1)
{
    // today is monday
}
else
{
    // find last monday
}

1
如果今天是星期一,这将给出一周前的日期。 - nickf
@nickf:请查看更新后的答案。我发帖后想起来了 :) - mr.b
1
在使用strtotime时要注意措辞,“previous monday”会让你得到上周一的日期,而你实际上想要的是当前周的周一。如果我没记错的话,在php中,本周指的是从周一到周日,但如果你想要找到周二的日期,那么应用你的答案会在周一和周二都给出错误的结果。 - Kevin Vaughan
1
@Kevin:我不确定我理解你的意思。我相信“previous”和“last”的确切区别是什么? - mr.b

6

$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


3

试一下这个。

echo date('Y-m-d', strtotime('last monday', strtotime('next monday')));

如果今天是星期一,它将返回当前日期,否则将返回上个星期一。至少在我的 PHP 5.2.4 版本下,使用 en_US 地区设置可以实现这样的功能。

2

试试这个

$day_of_week = date("N") - 1; 
$monday_time = strtotime("-$day_of_week days");

0

我的尝试:

<?php
$weekday = date("w") - 1;
if ($weekday < 0)
{
    $weekday += 7;
}
echo "Monday this week : ", date("Y-m-d",time() - $weekday * 86400) , "\n";
?>

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