2017-08-14 127 views
1

PHP 7.1.7PHP從兩個現有的日期變量中減去一週

我有一個從週六到週五的自定義工作處理周。對於下面的代碼,我選擇當前處理周,其中$ current_date爲'08/25/2017',並返回'08/19/2017'(週六)至'08/25/2017'的範圍(星期五)。

我現在想要做的是獲得以前的工作周。選擇'08/19/2017',應該是'08/12/2017'到'08/18/2017'。

我很困惑,爲什麼當我從$週六和$週五的日期減去1周後,新的「上一週工作周」變量就關閉了。

在PHP的輸出是:

此報告周:2017年8月19日到2017年8月25日

前一報告周:1969年12月31日至12/31/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/>" 

?>

感謝您的幫助。

+0

不能正常工作? – Andreas

+0

我的回答有什麼問題嗎? – Andreas

回答

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年的時區。