PHP从两个现有日期变量中减去一周

时间:2017-08-14 17:17:55

标签: 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'。

我很困惑为什么,当我从$ 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:&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/>"   

&GT;

感谢您的帮助。

1 个答案:

答案 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:&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


您获得输出的原因是您尝试在UNIX值上使用strtotime 正如函数的名称所说,“字符串到时间”。
UNIX值不是字符串,它是整数。所以它失败了,变成了0 然后在日期函数中使用0,你得到1970年 可能你或者服务器在GMT以西,所以你得到一个负值,因为1969年的时区....