2010-06-02 115 views
10

我需要找到本周的周一的日期。我怎样才能在PHP 4中做到这一点?获取本周的周一在PHP 4的日期

+1

我真的觉得你有在PHP4工作,因为PHP5的日期功能* waaaay *更好。另外PHP4已经正式停止使用了一段时间了,所以它不会再有任何补丁,它可能是不安全的 - 它不应该再用于生产中。 – Spudley 2010-11-03 13:36:16

回答

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

虽然只有一个说明。你想确保今天不是星期一,否则你会得到日期以前的星期一,就像它说的那样。可以按如下步骤

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

如果今天是星期一,则给出一个星期前的日期。 – nickf 2010-06-02 14:01:35

+0

@nickf:查看更新后的答案。我记得,在我发布后.. :) – 2010-06-02 14:03:37

+1

小心你与strtotime一起使用的语言,“上一个星期一”在一周前会在星期一到达,当你真的想要这一天。 IIRC,这周在PHP中意味着星期一到星期日,但是如果你想用你的答案找到星期二的日期,那么这会在星期一和星期二给你错误的结果。 – 2010-06-02 14:04:39

9
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日等。试试。

+0

1星期一,2星期二,3星期三等:)试试.. – apis17 2010-06-02 14:32:44

+0

这一个更有效 – r4ccoon 2012-05-17 04:41:21

+2

那么这不会给上周一,如果你在星期天尝试这个代码! – ErcanE 2015-03-08 22:48:21

0

我尝试:

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

试试这个:

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

如果今天是星期日呢? :) – 2010-06-02 14:25:55

+0

@ mr.b - 那么它应该仍然按照期望行事(假设星期日是本周的开始) – nickf 2010-06-02 23:17:55

+0

这是我最喜欢的在周一00:00:00获得的解决方案。 mktime(0,0,0,日期('m'),日期('j') - 日期('N')+1,日期('Y'))的另一种(较不优雅的) – neokio 2012-07-04 08:14:48

2

试试这个。

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

如果今天是星期一,它将返回当前日期,否则将返回上一个星期一。至少它在我的PHP 5.2.4的en_US语言环境下。

3

$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

70

Easisest方式:

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

哈!当他们[说](http://php.net/manual/en/function.strtotime.php)“将任何英文文本日期时间描述解析为Unix时间戳记”时,他们真的是这个意思,不是吗?对大多数可读的解 – 2010-11-03 13:33:56

+0

+1!真是简单的解决方案。很高兴我搜索了这个,因为我已经建立了一些精心制作的工程来确定星期一的日期。尽管错字:'strotime'应该是'strtotime'。 – Alec 2011-09-11 23:19:08

+1

今天是星期四2012/05/17(Y-m-d),当我回声(日期('Y-m-d',strtotime('星期一这周')));它是2012/05/21,这是下周一的星期一 – r4ccoon 2012-05-17 04:35:24

1

试试这个

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