PHP 7.1.7
我有一个定制的工作处理周,从星期六到星期五。对于下面的代码,我选择当前处理周,其中$ current_date为'08 / 25/2017'并且返回'08 / 19/2017'(星期六)到'08 / 25/2017'的范围(星期五)。
我现在要做的是获得之前的工作处理周。选择'08 / 19/2017',应该是'08 / 12/2017'到'08 / 18/2017'。
我很困惑为什么,当我从$ Saturday和$ Friday日期减去1周后,新的'上一个工作周'变量就会关闭。
php的输出是:
本报告周:2017年8月19日至2017年8月25日
上一个报告周:1969年12月31日至1969年12月31日
<?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/>"
&GT;
感谢您的帮助。
答案 0 :(得分:0)
Hello again :-)
好的星期五和星期六在UNIX时间已经是整数,所以你所要做的就是在几秒钟内减去一周。 (60 x 60 x 24 x 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/>";
您获得输出的原因是您尝试在UNIX值上使用strtotime
正如函数的名称所说,“字符串到时间”。
UNIX值不是字符串,它是整数。所以它失败了,变成了0
然后在日期函数中使用0,你得到1970年
可能你或者服务器在GMT以西,所以你得到一个负值,因为1969年的时区....