2012-02-28 106 views
1

我試圖讓我的頭繞着別人的代碼,他們已經編寫了處理新聞故事發布日期的代碼。問題來了,因爲他們使用的是這一行 -理解日期處理時間

$date = strtotime("midnight", strtotime($dateString)); 

處理使用jQuery的日曆控件選擇一個日期。這適用於將來的日期,但是當您嘗試使用上一個日曆年的日期時,它會使用當前年份。我認爲這是由於「午夜」發現選定日期和月份的最接近實例。

我可以刪除「午夜」,但我不確定這會產生什麼影響 - 是否有一個原因,午夜可以在那裏?

編輯:這是處理日期的完整代碼塊。日期包含允許用戶在特定時間發佈項目的時間。

  $array['display_date'] = '24 October, 2011 17:30'; 
      $string = $array['display_date']; 
      $dateString = substr($string, 0, -5); 

      $timeArray = explode(':', substr($string, -5)); 
      $hours_in_secs = 60 * 60 * $timeArray[0]; 
      $mins_in_secs = $timeArray[1]; 
      $date = strtotime("midnight", strtotime($dateString)); 

      $timestamp = $date + $hours_in_secs + $mins_in_secs; 

      //assign timestamp to validation array 
      $array['display_date'] = $timestamp; 
      echo $array['display_date']; // Output = 1351094430 (Oct 24 2012 17:00:30) 
+1

'$ dateString'的格式是什麼? – Mchl 2012-02-28 11:09:50

+0

樣本輸入,預期輸出,實際輸出? – 2012-02-28 11:17:21

+0

更新了示例輸入和輸出 – user1153594 2012-02-28 11:57:36

回答

4

這真的取決於什麼$dateString包含。假設你的jQuery小部件也提供了時間部分,你的同事可能想要刪除時間部分。比較以下幾點:

echo date(DATE_ATOM, strtotime('2010-10-01 17:32:00')); 
// 2010-10-01T17:32:00+02:00 

echo date(DATE_ATOM, strtotime("midnight", strtotime('2010-10-01 17:32:00'))); 
// 2010-10-01T00:00:00+02:00 

如果你的部件犯規返回的時間部分,我不明白爲什麼要設定日期到午夜,因爲這將是午夜自動:

echo date(DATE_ATOM, strtotime('2010-10-01')); 
// 2010-10-01T00:00:00+02:00 

注意,所有這些過去的日期,它們會導致過去的特定年份,而不是像你說的那樣是當年。如果他們在您的代碼中執行操作,則原因必須在其他位置。

當你改變代碼時會有反響嗎?我們無法知道。這只是一行代碼,我們不知道任何上下文。當你改變代碼時,你的unit-tests應該告訴你什麼時候什麼時候中斷。更新

編輯告訴你的代碼塊是沒有任何意義。詢問寫下它應該做什麼的人。過去幾年它不僅會錯誤地返回當前年份,而且會導致記錄結果不正確,例如,

24 March, 2010 17:30 will be 2012-03-24T17:00:30+01:00 

我認爲這是在轉彎24 March, 2010 17:30成有效的時間戳,這是一個格式strtotime不能識別的一種嘗試。但是這種方法被破壞了。當你在PHP5.3使用

$dt = DateTime::createFromFormat('d F, Y H:i', '24 March, 2010 17:30'); 
echo $dt->format(DATE_ATOM); // 2010-03-24T17:30:00+01:00 

如果您沒有在5.3的是,經過https://stackoverflow.com/search?q=createFromFormat+php的替代解決方案。那裏有一對夫婦。

+0

感謝您的回覆戈登。新聞項目實際上設置爲允許用戶在確切時間發佈它們 - 所以通過日曆選擇日期和時間。只是檢查了這一點,它工作正常。我將添加完整代碼塊 – user1153594 2012-02-28 11:40:14

+0

好的 - 我最好放棄那裏的內容並從頭開始。謝謝Gordon – user1153594 2012-02-28 12:02:11

+0

一年前的逗號是主要問題,其餘代碼也需要整理。 – user1153594 2012-02-28 12:16:08