PHP вычитает неделю из двух существующих переменных даты

PHP 7.1.7

У меня есть специальная рабочая неделя, которая длится с субботы по пятницу. Для приведенного ниже кода я выбираю текущую неделю обработки, где $ current_date равен ’08 / 25/2017 ‘и возвращает диапазон от ’08 / 19/2017’ (суббота) до ’08 / 25/2017 ‘( пятница).

То, что я пытаюсь сделать сейчас, это получить предыдущую рабочую неделю обработки. Если выбрано ’08 / 19/2017 ‘, это должно быть ’08 / 12/2017’ до ’08 / 18/2017 ‘.

Я не понимаю, почему, когда я вычитаю 1 неделю из дат в субботу и пятницу, новые переменные «предыдущая рабочая неделя» отключаются.

Вывод php:

Эта отчетная неделя: с 19.08.2017 по 25.08.2017

Предыдущая отчетная неделя: с 31.12.1969 г. по 31.12.1969 г.

<?php
#------------ WORKING -------------------------
$current_date = "08/25/2017";

if(date("l", strtotime($current_date)) == "Saturday"){
$Saturday = strtotime($current_date);
}else{
$Saturday = strtotime($current_date . " previous saturday");
}
$Friday =  strtotime(date("m/d/Y", $Saturday) . " next friday");
echo "This Reporting Week:&nbsp;" . date("m/d/Y", $Saturday) . " to " . date("m/d/Y", $Friday) . "<br/>";
echo "<br/><br/>"   ;

#------------ NOT WORKING ----------------------
#not working
$previous_week_friday = strtotime('-1 week', strtotime($Friday));
$previous_week_friday = date("m/d/Y", $previous_week_friday);

$previous_week_saturday = strtotime('-1 week', strtotime($Saturday));
$previous_week_saturday = date("m/d/Y", $previous_week_saturday);

echo "Previous Reporting Week:&nbsp;" . date("m/d/Y", $previous_week_friday) . " to " . date("m/d/Y", $previous_week_saturday) . "<br/>";
echo "<br/><br/>"

?>

Спасибо за любую помощь.

1

Решение

Hello again :-)

Итак, $ Friday и $ Saturday — это целое число в UNIX-времени, поэтому все, что вам нужно сделать, это вычесть одну неделю в секундах. (60 х 60 х 24 х 7).

//#------------ WORKING -------------------------
$current_date = "08/25/2017";

if(date("l", strtotime($current_date)) == "Saturday"){
$Saturday = strtotime($current_date);
}else{
$Saturday = strtotime($current_date . " previous saturday");
}
$Friday =  strtotime(date("m/d/Y", $Saturday) . " next friday");
echo "This Reporting Week:&nbsp;" . date("m/d/Y", $Saturday) . " to " . date("m/d/Y", $Friday) . "<br/>";
echo "<br/><br/>\n"   ;

//#------------ NOW IT'S WORKING ----------------------

$previous_week_friday = date("m/d/Y", $Friday-3600*24*7);
$previous_week_saturday = date("m/d/Y", $Saturday-3600*24*7);

echo "Previous Reporting Week:&nbsp;" . $previous_week_friday . " to " . $previous_week_saturday . "<br/>";
echo "<br/><br/>";

https://3v4l.org/0gj40


Причина, по которой вы получаете вывод, заключается в том, что вы пытаетесь использовать strtotime для значения UNIX.
Как следует из названия функции, «строка во времени».
Значение UNIX — это не строка, а целое число. Таким образом, это терпит неудачу и становится 0.
Затем 0 используется в функции даты, и вы получите 1970.
И, вероятно, вы или сервер к западу от GMT, поэтому вы получаете отрицательное значение из-за часового пояса 1969 года ….

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector