2017-05-26 62 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()); 
相关问题