2015-07-20 112 views
0

我需要能夠創建兩個時間點:的strtotime 8天前,整個24小時

  1. 8天前從今天起,這一天的開始(上午12:00)
  2. 7天以前從今天起,這一天的結束(下午11:59)

我開始它,但它不是生產什麼,我需要:

$starting_time = new DateTime('today'); 
$starting_time->modify('-7 day -1 second'); 

$ending_time = new DateTime('today'); 
$ending_time->modify('-8 day -1 second'); 

而我需要的m都是完全格式化的時間戳:2015:07:14 15:51:12

最終目標是能夠執行SQL查詢來檢查在24小時內登陸的日期,例如所以:

whereBetween('mytable.expiry_date', array($starting_time, $ending_time)) 
+0

這就是外星代碼。考慮在11:59:59 pm運行'$ start_time'和在12:00:00 am運行'$ end_time'。生成** ONE **「今日」值,並根據需要進行修改。 –

+0

對不起,我不確定你的意思。我需要這兩個值,因此我可以運行SQL查詢,在該時間段內檢查日期。 – dcolumbus

+0

然後不要那樣做。 'select ... where date(yourfield)='2015-07-14'',使用你的db的常用日期/時間函數。 –

回答

0

試試這個

$start = new DateTime(); 
$start->setTime(0,0,1); 
$end = clone $start; // or just make new DateTime; 
$end->modify('-7 day'); 
$start->setTime(23,59,59); 

但正如其他查詢數據庫,你應該只使用DATE()函數,它更簡單,更健壯,更易於閱讀和理解時已經注意到了後面的代碼意圖。

0

按要求註釋:

考慮,如果你運行你的兩個new Date()右繞daychange會發生什麼:

11:59:59pm -> new Date('today') -> $start = Jul 20, 2015 11:59:59pm 
12:00:02am -> new Date('today') -> $end = Jul 21, 2015 12:00:02am 

$start -> -7 days -1 second -> Jul 13, 2015 11:59:58pm 
$end -> -8 days -1 second -> Jul 13, 2015 12:00:01am 

「糟糕」。

有些人爲的例子,但從來沒有假設'今天'將在一個程序中保持不變。

+0

感謝Marc。讓我看看,看看這是否真的是我需要:) – dcolumbus

+0

沒有必要讓PHP爲你生成日期,除非你有非常特殊的需求。 mysql和大多數其他數據庫都有這種類型的日期/時間函數 –

0

您可以簡單地獲取7天前的日期並追加00:00:00和23:59:59。

Like

$ start_time = $ date_7days_ago。 「00:00:00」; $ end_time = $ date_7days_ago。「23:59:59」;

這對您正在查詢的查詢可以正常工作。