Intereting Posts
Как сохранить gettext множественную форму в переменной, используя php Какая была ваша любимая функция, которая была введена в PHP 5.3? Проверьте, содержит ли массив элементы, имеющие элементы другого массива SOAP-ERROR: Кодирование: объект не имеет свойства Mysqli – При открытии двух соединений с одним и тем же хостом с mysql, но с разными базами данных, mysqli открывает соединение один раз? Создайте папку, если она еще не существует. Что значит запускать PHP в тихом режиме? PDOException SQLSTATE Нет такого файла или каталога Можно ли заставить glob () PHP искать файлы в нечувствительном к регистру образом? Переменная PHP не отображается на странице через ajax jquery Что такое регулярное выражение для этого Как получить данные из параметра модуля в joomla Идентификатор ресурса # 4 PHP MYSQL woocommerce получить информацию о заказе после оформления заказа Помощь в спам-логике

Возвращать даты текущей недели календаря как массив в PHP5

Как бы я соединил функцию PHP5, которая найдет текущую неделю календаря и вернет даты каждого дня недели как массив, начиная с понедельника? Например, если функция была запущена сегодня (Thu Feb 25 2010), функция вернет массив, например:

[0] => Mon Feb 22 2010<br /> [1] => Tue Feb 23 2010<br /> [2] => Wed Feb 24 2010<br /> [3] => Thu Feb 25 2010<br /> [4] => Fri Feb 26 2010<br /> [5] => Sat Feb 27 2010<br /> [6] => Sun Feb 28 2010<br /> 

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

Благодаря!

    Я предполагаю, что решение должно состоять в том, чтобы получить strtotime метку, соответствующую последнему понедельнику, используя strtotime :

     $timestampFirstDay = strtotime('last monday'); 

    Но если вы попробуете сегодня (в четверг) , что-то вроде этого:

     $timestampFirstDay = strtotime('last thursday'); var_dump(date('Ym-d', $timestampFirstDay)); 

    ты получишь :

     string '2010-02-18' (length=10) 

    т.е. на прошлой неделе … Для strtotime «последний» означает «тот, который был до сегодняшнего дня» .

    Это означает, что вам нужно будет проверить, является ли сегодня «последним понедельником», возвращенное strtotime плюс одна неделя – и, если да, добавьте одну неделю …

    Вот возможное решение (возможно, более умное) :

     $timestampFirstDay = strtotime('last monday'); if (date('Ym-d', $timestampFirstDay) == date('Ym-d', time() - 7*24*3600)) { // we are that day... => add one week $timestampFirstDay += 7 * 24 * 3600; } 

    И теперь, когда у нас есть отметка времени «последний понедельник» , мы можем написать простую петлю for циклов, которая циклически 7 раз, добавив 1 день каждый раз, например:

     $currentDay = $timestampFirstDay; for ($i = 0 ; $i < 7 ; $i++) { echo date('Ym-d', $currentDay) . '<br />'; $currentDay += 24 * 3600; } 

    Что даст нам такой выход:

     2010-02-22 2010-02-23 2010-02-24 2010-02-25 2010-02-26 2010-02-27 2010-02-28 

    Теперь, до вас:

    • Измените это for цикла, чтобы он сохранял даты в массиве
    • Определите, какой формат вы хотите использовать для функции date

    Повеселись 😉

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

     $dateCompare = time(); // replace with a parameter $dateCompare = mktime(12, 0, 0, date('n', $dateCompare), date('j', $dateCompare), date('Y', $dateCompare)); 

    Затем найдите день недели вашей даты.

     $dow = date('N', $dateCompare); 

    1 – понедельник, так что выясните, сколько дней с понедельника мы.

     $days = $dow - 1; 

    Теперь вычитайте количество дней в секундах, пока вы не вернетесь в понедельник.

     $dateCompare -= (3600 * 24 * $days); 

    Теперь соберите свой массив дней.

     $output = array(); for ($x = 0; $x < 7; $x++) { $output[$x] = $dateCompare + ($x * 24 * 3600); } 

    Это массив временных меток, но вы можете сохранить даты как строки, если хотите.