2016-01-21 62 views
0

我知道月初的確切日期,但我需要知道本月第一週何時開始,本週是否可以在本月之外開始。如何在父時間範圍內獲得子時間範圍的開始日期

我可以這樣做 - 當「月」啓動發現平日和減天數爲「周」的開始:

$weekday = d('w', $monthStartTimeStamp); 
$weekStart = $monthStartTimeStamp - strtotime('1 day', 0) * (7 - $weekday); 

問:

有一些方法爲了使這種計算對於我事先不知道的時間框架更通用?

可能的使用情況:

  1. 鑑於一些 「DATETIME」 得到第一個 「年」 的日期時間
  2. 鑑於一些 「DATETIME」 得到第一個 「月」
  3. 鑑於一些日期時間「DATETIME」得到第一個「周」
  4. 鑑於一些「DATETIME」的日期時間得到第一個「日」
  5. 鑑於一些「DATETIME」的日期時間獲得的第一個「一小時」的日期時間
  6. 鑑於一些 「DATETIME」 得到第一個 「分」

對於日期時間的日期時間2016年1月10日10:30的結果將是:

  1. 年份:2016年1月1日00:00
  2. 月:2016年1月1日00:00
  3. 下週展望:2016年1月4日00:00
  4. 日:2016年1月10日00:00
  5. HOUR:2016-01 -10 10:00
  6. 一刻:2016年1月10日10:30

P. S.大部分問題在這裏指定究竟需要什麼時間框架,例如「如何開始一年」,他們沒有回答如何在螞蟻時間框架內做到這一點。

+0

我敢肯定你必須對每個可能的情況進行「手動」操作,因爲它們在很多方面有所不同 – Gavriel

回答

1

下面是僞代碼的想法:

  • 您已經有一週
  • 對於剩下的最困難的情況下:轉換的日期一樣的格式:爲yyyymmddhhmm,則根據$間隔只是改變右邊的X字符至0:

`

$int2char = array(
    'YEAR' => 8, 
    'MONTH' => 6, 
    'DAY' => 4, 
    'HOUR' => 2, 
    'MINUTE' => 0 
); 

$interval = 'MONTH'; 
$str = date("YmdHi", $timestamp); 
$zeros = $int2char[$interval]; 
$d = substring($str, 0, 12-$zeros) . substring("00000000", 0, $zeros); 
$date = DateTime::createFromFormat('YmdHi', $d); 
echo $date->format('Y-m-d H:i'); 

`