Я готовлю запрос к 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'));
Это о более читаемый миллион раз.Спасибо.
вы можете использовать strtotime для такого рода проблем с датой
echo strtotime("last Monday");
Ответ Марвина действительно элегантен, хотя, если вы действительно хотите повысить производительность, вы можете сделать это с помощью небольшой арифметики. Вы можете вывести формулу / метод для преобразования произвольной даты в «дни с некоторой начальной точки» (вероятно, 01.01.0000), и тогда остальные операции будут проще с этим. Получить день недели из такого числа так же просто, как вычесть и получить остаток от деления.
Фактически, PHP имел класс Date в своей библиотеке PEAR, который делал именно это.