Доберитесь В прошлый понедельник - воскресные даты: существует ли лучший путь?

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

WHERE YEARWEEK(contactDate) = YEARWEEK(DATE_SUB(CURDATE(),INTERVAL 7 DAY))

обнаружить, что MySQL рассматривает недели как в воскресенье - в понедельник. Так вместо этого я анализирую получение начинания и даты окончания в php как это:

$i = 0; 
while(date('D',mktime(0,0,0,date('m'), date('d')-$i, date('y'))) != "Mon") { 
  $i++; 
}

$start_date = date('Y-n-j', mktime(0,0,0,date('m'), date('d')-($i+7), date('y')));
$end_date  = date('Y-n-j', mktime(0,0,0,date('m'), date('d')-($i+1), date('y')));

Это работает - это получает дату текущей недели в течение понедельника (пятящийся, пока понедельник не поражен), тогда вычисляет даты предыдущей недели на основе той даты.

Мой вопрос: существует ли лучший способ сделать это? Просто кажется неаккуратным, и я ожидаю, что кто-то там может дать мне более чистый способ сделать это - или возможно не потому что мне нужно в понедельник - в воскресенье недели.

Править

По-видимому, существует:

$start = date('Y-m-d',strtotime('last monday -7 days'));
$end   = date('Y-m-d',strtotime('last monday -1 days'));

Это о более читаемый миллион раз.Спасибо.

15
задан Stomped 9 March 2010 в 21:25
поделиться

2 ответа

вы можете использовать strtotime для такого рода проблем с датой

echo strtotime("last Monday");
32
ответ дан 1 December 2019 в 00:26
поделиться

Ответ Марвина действительно элегантен, хотя, если вы действительно хотите повысить производительность, вы можете сделать это с помощью небольшой арифметики. Вы можете вывести формулу / метод для преобразования произвольной даты в «дни с некоторой начальной точки» (вероятно, 01.01.0000), и тогда остальные операции будут проще с этим. Получить день недели из такого числа так же просто, как вычесть и получить остаток от деления.

Фактически, PHP имел класс Date в своей библиотеке PEAR, который делал именно это.

2
ответ дан 1 December 2019 в 00:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: