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: " . 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: " . date("m/d/Y", $previous_week_friday) . " to " . date("m/d/Y", $previous_week_saturday) . "<br/>";
echo "<br/><br/>"
?>
Спасибо за любую помощь.
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: " . 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: " . $previous_week_friday . " to " . $previous_week_saturday . "<br/>";
echo "<br/><br/>";
Причина, по которой вы получаете вывод, заключается в том, что вы пытаетесь использовать strtotime для значения UNIX.
Как следует из названия функции, «строка во времени».
Значение UNIX — это не строка, а целое число. Таким образом, это терпит неудачу и становится 0.
Затем 0 используется в функции даты, и вы получите 1970.
И, вероятно, вы или сервер к западу от GMT, поэтому вы получаете отрицательное значение из-за часового пояса 1969 года ….
Других решений пока нет …