2010-06-02 3 views
10

Мне нужно найти дату понедельника на текущей неделе. Как я могу это сделать в PHP 4?Получить дату понедельника на текущей неделе в PHP 4

+1

Я действительно чувствую, вам приходится работать в PHP4, поскольку функциональность дата PHP5 является * Waaaay * лучше.Кроме того, PHP4 уже давно анонсирован End-Of-Life, поэтому он не получит никаких патчей и, вероятно, небезопасен - в любом случае он не должен использоваться в производстве. – Spudley

ответ

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

Только одно примечание. Вы хотите убедиться, что сегодня не сегодня, иначе вы получите дату предыдущий понедельник, точно так же, как говорится. Вы можете сделать это следующим образом

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

Это датируется неделю назад, если сегодня понедельник. – nickf

+0

@nickf: см. Обновленный ответ. Я вспомнил, что после того, как я разместил .. :) –

+1

Осторожно, с формулировкой, которую вы используете с strtotime, «предыдущий понедельник» вы получите неделю назад в понедельник, когда вам действительно захочется текущий день. IIRC, на этой неделе в php означает понедельник до воскресенья, но если вы должны применить свой ответ на поиск даты вторника, например, это даст вам неправильный результат как в понедельник, так и во вторник. –

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

+0

этот действительный – r4ccoon

+2

Ну, это не дает предыдущий понедельник, если вы попробуете этот код в воскресенье! – ErcanE

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

А что, если сегодня воскресенье? :) –

+0

@ mr.b - тогда он должен действовать по желанию (при условии, что воскресенье - начало недели) – nickf

+0

Это мое любимое решение для получения понедельника в 00:00:00. Другой (менее элегантный) способ получить это: 'mktime (0,0,0, date ('m'), date ('j') - date ('N') + 1, date ('Y'))' – neokio

2

Попробуйте это.

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

Он будет возвращать текущую дату, если сегодня понедельник, и в противном случае вернется в последний понедельник. По крайней мере, это делается на моем PHP 5.2.4 под en_US locale.

3

$thisMonday = date('l, F d, Y', time() - ((date('w')-1) * 86400));

Edit: объяснение

  • 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

Hah! Когда они [говорят] (http://php.net/manual/en/function.strtotime.php) «Разберитесь с каким-либо английским текстовым описанием даты и времени в временную метку Unix», они действительно это означают, не так ли? +1 для наиболее читаемого решения. –

+0

+1! Действительно простое решение. Рад, что я искал это, потому что я уже строил сложную конструкцию, чтобы определить дату понедельника. Типично: 'strotime' должен быть' strtotime'. – Alec

+1

сегодня - четверг 2012/05/17 (Y-m-d), когда я делаю эхо (дата («Y-m-d», strtotime («понедельник на этой неделе»))); он идет на 2012/05/21, который наступает на следующую неделю – r4ccoon

1

Попробуйте

$day_of_week = date("N") - 1; 
$monday_time = strtotime("-$day_of_week days"); 
Смежные вопросы