2017-05-26 64 views
0

我從外部來源得到年份和「一年中的一週」,我無法改變。我想獲得具體一週的星期一和星期日的日期。現在我已經得到了下面的代碼,但看起來很複雜。根據週數和年份獲取具體的一天的日期

<?php 

// simulate the server data 
$year = date('Y'); 
$week = 19; 

$weekNow = (int) date('W'); 
$weekDiff = $week - $weekNow; // can be positive or negative 
$daysDiff = $weekDiff * 30; 

$dayInDesiredWeek = (int) date('N', strtotime($daysDiff . ' days')); 
if($dayInDesiredWeek !== 1) { 
    $daysDiff += $daysDiff > 0 ? -($dayInDesiredWeek - 1) : $dayInDesiredWeek - 1; 
} 
$monday = date('Y-m-d', strtotime($daysDiff . ' days')); 
$sunday = date('Y-m-d', strtotime($monday . '7 days')); 

有沒有其他更簡單的方法可以用來獲得相同的結果?先謝謝你。

回答

0

因此,我讀到PHPDocs of DateTime Object時看到的最簡單的解決方案。

因此,步驟是:

  1. 創建new DateTime()對象
  2. 運行它setISODate方法使用參數:($年,$弱,$ offsetFromMonday)
  3. 然後運行format方法並獲得所需的日期

因此,所有一起:

$monday = ($dt = new DateTime)->setISODate($year, $weak, 1)->format('Y-m-d'); 
$sunday = $dt->setISODate($year, $weak, 7)->format('Y-m-d'); 
+0

由於沒有提供任何其他的答案,我標誌着這是正確的。 –

0
$dt = date("Y-m-d", strtotime("2017W01")); 

使用Carbon

$dt = new Carbon($dt); 

var_dump($dt->startOfWeek()); 
var_dump($dt->endOfWeek()); 
相關問題