2015-12-30 28 views
-1

我被要求實現一個系統,每天早上六點自動生成一個報告,其中需要一個開始日期和結束日期。報告實施本身已經是功能性的,但我很難理解的是如何獲得我需要的日期。在PHP中獲取具體日期

結束日期應該是上一個工作日(星期一到星期五;腳本將在週末運行,但使用最近的星期五生成報告,星期一的報告也將使用星期五作爲結束日期)。開始日期應該是該月第一天結束日期前的一年。我們目前手動指定日期。我知道如何使用DateTime對象來獲取昨天的日期,但那不是我正在尋找的。

我該如何獲得這些日期?我知道如果當天是星期六,星期天或星期一,我基本上可以創建一條if語句來說明如何使用星期五的日期,但我可以從哪裏出發?我只需要一天,一個月和一年。一天中的時間並不重要,因爲每當生成新報告時,腳本都會記錄當前時間戳。

這是我到目前爲止。

//Build the Inventory Part Report 
function RunTest() 
{ 
    //End date should be last business day 
    $end_date = new DateTime(); 
    $end_date->add(DateInterval::createFromDateString("yesterday")); 

    //Start date should be one year before end date on first day of that month 
    $start_date; 

    //$start_date="2014-12-01"; 
    //$end_date="2015-12-30"; 

    //Method generates report 
    generateReport($start_date, $end_date); 

    echo "New Report Generated Successfully!!"; 

} 
+1

http://php.net/manual/en/class.datetime.php –

+0

你可以提供一些你已經嘗試過的代碼,因爲它會使它更清楚地理解。 –

回答

0

您可能需要之間沒有區別測試last Friday情況,但是這應該這樣做,我認爲:

$end_date; 
$start_date; 

if (date("w") == 0 || date("w") == 6 || date("w") == 1) 
{ 
    $end_date = strtotime('last Friday'); 
} 
else 
{ 
    $end_date = strtotime("-1 day"); 
} 

$start_date = strtotime(date("m/d/Y", $end_date)." -1 year"); 

echo date("m/d/Y", $start_date)." to ".date("m/d/Y", $end_date); 

今天的輸出是12/29/2014 to 12/29/2015

如果一週中的一天是我們上週五使用的0,1或6(星期日,星期一或星期六),否則我們只使用前一天,然後我們有我們的$end_date。爲了得到$start_date我們簡單地從中減去一年。

strtotime()是一個非常有用的功能,你可以在這裏閱讀更多關於它:
http://www.w3schools.com/php/func_date_strtotime.asp

+0

我現在試圖實現這個,因爲它似乎是最可能的答案,但究竟是「$ t?」您在頂部if語句和else語句中的strtotime函數中使用它。我認爲你犯了一個錯誤。你說產量是12/29/14到12/29/15,但我需要它是12/1/14到12/29/15。 – user3521737

+0

哎呦$ t應該是$現在,謝謝,複製錯誤:) –

+0

我實際上已將'$ now'更改爲'$ t' –

0

你可以使用PHP的相對日期的(誰寫這段代碼是一個傳奇)

例如..

$date = new DateTime('first day of week'); 

這是從我的頭頂,不得工作..我會鏈接官方documentation

0

我可以從哪裏出發?我只需要一天,一個月和一年。

當您獲取DateTime對象時,您只需zero out the小時/分鐘/秒。

$dt = new DateTime(); 
$dt->setTime(0, 0, 0); 

有一個Date對象表示了一天表示在00:00:00日期(和PHP沒有前者)DateTime對象

0

我找到了解決方案,使起始日期的月份的第一天的最後一年。它遵循我今天早些時候批准的解決方案,而最終的結果蜿蜒這樣看:

//End date should be last business day; Sunday, Monday, and Saturday all use the previous Friday for their end date 
if(date("w") == 0 || date("w") == 6 || date("w") == 1){ 
    $end_date = date("Y-m-d", strtotime("last Friday")); 
} 
else{ 
    $end_date = date("Y-m-d", strtotime("-1 day")); 
} 

//Start date should be on eyear before end date on first day of that month 
$tempStart = strtotime($end_date . " -1 year"); 
$start_date = date("Y-m-1", $tempStart); 

正如你所看到的,最後一行只是把1代替,其中「d」會去。我已經測試過這個,它正確顯示日期。