Не работает strtotime() с полученными датами

200
04 декабря 2021, 13:00

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

Понедельник, 25 ноября

Теперь я хочу, чтобы к полученному формату даты можно было прибавлять или отнимать дни, и использую strtotime(), но у меня не получается. Как в return вывести + 1 день от данного формата? Надеюсь, что доступно описал проблему.

Моя функция:

    function thatWeekMon() {
    $week_number = date("W"); 
    $year = date("Y");
    $months = [
        1 => 'Января', 2 => 'Февраля', 3 => 'Марта', 4 => 'Апреля',
        5 => 'Мая',    6 => 'Июня',    7 => 'Июля',  8 => 'Августа',
        9 => 'Сентября', 10 => 'Октября', 11 => 'Ноября', 12 => 'Декабря'
    ];
    $days = ["Sunday" => "Воскресенье", "Monday" => "Понедельник", "Tuesday" => "Вторник", "Wednesday" => "Среда", "Thursday" => "Четверг", "Friday" => "Пятница", "Saturday" => "Суббота"];
    $d = strtotime("+1 days");
    $first_day = $days[date('l', ($week_number-1) * 7 * 86400 + strtotime('1/1/' . $year) - date('w', strtotime('1/1/' . $year)) * 86400 + 86400)];
    $first_day1 = date('d', ($week_number-1) * 7 * 86400 + strtotime('1/1/' . $year) - date('w', strtotime('1/1/' . $year)) * 86400 + 86400);
    $first_day2 = $months[date('m', ($week_number-1) * 7 * 86400 + strtotime('1/1/' . $year) - date('w', strtotime('1/1/' . $year)) * 86400 + 86400)];
    return date("$first_day, $first_day1 $first_day2", $d);
}

Подскажите, пожалуйста, в чем может быть дело или как переписать ее?

Answer 1

Дату на русском языке не сможет распарсить ни date(), ни DateTime::createFromFormat(), поэтому вам сначала нужно прибавить нужное количество дней, а потом уже переводить дату на другой язык. Вы можете это сделать, например, с помощью метода add() класса DateTime:

$date = new DateTime('2019-11-25');
$date->add(new DateInterval('P1D'));
$result = $date->format('l, d F'); // Tuesday, 26 November

Подробная информация в документации:

  • DateTime::add
  • DateInterval::__construct
Answer 2

В моем случае сработал такой вариант:

function beed($add=0) {
    $months = [
        1 => 'Января', 2 => 'Февраля', 3 => 'Марта', 4 => 'Апреля',
        5 => 'Мая',    6 => 'Июня',    7 => 'Июля',  8 => 'Августа',
        9 => 'Сентября', 10 => 'Октября', 11 => 'Ноября', 12 => 'Декабря'];
    $days = ["Sunday" => "Воскресенье", "Monday" => "Понедельник", "Tuesday" => "Вторник", "Wednesday" => "Среда", "Thursday" => "Четверг", "Friday" => "Пятница", "Saturday" => "Суббота"];
    $r = date('l');
    $t = $days[date('l', strtotime("Monday +$add days"))];
    $r1 = date('d');
    $t1 = date('d', strtotime("Monday +$add days"));
    $r2 = date('m');
    $t2 = $months[date('m', strtotime("Monday +$add days"))];
    return date("$t, $t1 $t2");
}
READ ALSO
Очередь отложенных сообщений

Очередь отложенных сообщений

Появилась задача, сделать демона, который будет выполнять задачи по расписаниюСначала я думал все эти задачи сохранять в таблицу и демон...

70
Вывести из базы 1 строку с шансом

Вывести из базы 1 строку с шансом

У меня есть такой запрос

216
Vk API PHP:Как получить фото от пользователя?

Vk API PHP:Как получить фото от пользователя?

Ну тоесть, мне нужно, если пользователь отправить фото, то бот его скачает, и сохранит, как такое реализовать?

180
Передача данных из формы в mysql!

Передача данных из формы в mysql!

Помогите пожалуйста почему не работаетОшибка - Информация не занесена в базу данных

190