Мне нужно получить первый день недели (понедельник), 8 недель назад с сегодняшнего дня, где 8 - переменная.Получить первый день текущей недели - x
Каков наилучший способ сделать это в PHP?
Мне нужно получить первый день недели (понедельник), 8 недель назад с сегодняшнего дня, где 8 - переменная.Получить первый день текущей недели - x
Каков наилучший способ сделать это в PHP?
$weeks = 8;
// Timestamp for $weeks weeks ago
$time = strtotime("$weeks weeks ago");
// Day of the week for $time (1 - Mon, ...)
$week_day = date('N', $time);
// Number of days from Monday
$diff = $week_day - 1;
// The date of the Monday $weeks weeks ago
echo date('j', $time - ($diff * 24 * 3600));
Для моего случая этот ответ самый лучший. Я заменил формат выходной даты на «d/m/Y». Спасибо всем за очень быстрые ответы! –
Вы можете сделать некоторую математику с датами в PHP, как:
$now = date('F d, Y H:i');
$newdate = date('F d, Y H:i', strtotime($now.' - 8 weeks'));
echo $newdate;
В этом случае он будет выводить текущую дату минус 8 недель.
Также сосчитать, какой день сегодня вы можете использовать:
$dw = date("w", strtotime($newdate));
Где $dw
будет 0 (воскресенье) до 6 (в субботу) подробную информацию можно найти: PHP: date
Решение
В вашем случае это будет выглядеть следующим образом:
<?php
$weeks = 8;
$now = date('F d, Y H:i:s');
$newdate = date('F d, Y H:i:s', strtotime($now.' - '.$weeks.' weeks'));
$new_date_day = date("w", strtotime($newdate));
$minus = $new_date_day - 1;
if ($minus < 0) { //check if sunday
$plus = $minus * -1;
$newdate = date('F d, Y H:i:s', strtotime($newdate.' + '.$plus.' days'));
} else {
$newdate = date('F d, Y H:i:s', strtotime($newdate.' - '.$minus.' days'));
}
echo $newdate;
?>
Конечно, вы можете echo
какой бы стиль вы ни выбрали. F.ex. F d, Y H:i:s
выведет November 28, 2016 06:18:03
.
На самом деле это не очень сложно, все, что вам нужно сделать, это немного поиграть с датами;
<?php
$dt = new Datetime(sprintf('%d weeks ago', 8)); // replace 8 with variable, your value, whatever
$day = $dt->format('w');
$dt->modify(sprintf('%d days go', ($day - 1) % 7));
ваш $dt
должен тогда иметь значение, которую вы ищете
Вы можете сделать это путь
echo date("l M-d-Y", strtotime('monday this week'));
echo date("l M-d-Y", strtotime('sunday this week'));
echo date("l M-d-Y", strtotime('monday last week'));
echo date("l M-d-Y", strtotime('sunday last week'));
echo date("l M-d-Y", strtotime('monday next week'));
echo date("l M-d-Y", strtotime('sunday next week'));
Вы можете также поиск monthwise
echo date("l M-d-Y", strtotime('first day of this month'));
echo date("l M-d-Y", strtotime('last day of this month'));
echo date("l M-d-Y", strtotime('first day of last month'));
echo date("l M-d-Y", strtotime('last day of last month'));
echo date("l M-d-Y", strtotime('first day of next month'));
echo date("l M-d-Y", strtotime('last day of next month'));
так что вы хотите сказать, вас нужно ехать 8 недель назад и получить дату понедельника с этой недели? –
Да, именно то, что я имел в виду. –
Лучший способ - использовать функции [datetime] (http://php.net/manual/en/ref.datetime.php) или [DateTime class] (http://php.net/manual/en/class. datetime.php) –