我已经看到了这个问题的一些变种,但我相信这个还没有得到回答.
我需要得到一周的开始日期和结束日期,按年份和周数选择(不是日期)
例:
输入:
getStartAndEndDate($week, $year);
Run Code Online (Sandbox Code Playgroud)
输出:
$return[0] = $firstDay;
$return[1] = $lastDay;
Run Code Online (Sandbox Code Playgroud)
返回值将类似于一个数组,其中第一个条目是星期开始日期,第二个条目是结束日期.
可选:当我们在它时,日期格式需要是Y-n-j
(正常日期格式,没有前导零.
我已经尝试编辑几乎完成我想要的现有功能,但到目前为止我没有运气.
请帮助我,提前谢谢.
小智 152
使用DateTime类:
function getStartAndEndDate($week, $year) {
$dto = new DateTime();
$dto->setISODate($year, $week);
$ret['week_start'] = $dto->format('Y-m-d');
$dto->modify('+6 days');
$ret['week_end'] = $dto->format('Y-m-d');
return $ret;
}
$week_array = getStartAndEndDate(52,2013);
print_r($week_array);
Run Code Online (Sandbox Code Playgroud)
返回:
Array
(
[week_start] => 2013-12-23
[week_end] => 2013-12-29
)
Run Code Online (Sandbox Code Playgroud)
解释:
更短的版本(在> = php5.3中工作):
function getStartAndEndDate($week, $year) {
$dto = new DateTime();
$ret['week_start'] = $dto->setISODate($year, $week)->format('Y-m-d');
$ret['week_end'] = $dto->modify('+6 days')->format('Y-m-d');
return $ret;
}
Run Code Online (Sandbox Code Playgroud)
可以通过> = php5.4中的实例化来缩短类成员访问权限.
Roh*_*fii 42
很多年前,我发现了这个功能:
function getStartAndEndDate($week, $year) {
$dto = new DateTime();
$dto->setISODate($year, $week);
$ret['week_start'] = $dto->format('Y-m-d');
$dto->modify('+6 days');
$ret['week_end'] = $dto->format('Y-m-d');
return $ret;
}
$week_array = getStartAndEndDate(52,2013);
print_r($week_array);
Run Code Online (Sandbox Code Playgroud)
小智 14
我们可以轻松实现这一目标,而无需额外的计算,除了DateTime类固有的计算.
function getStartAndEndDate($year, $week)
{
return [
(new DateTime())->setISODate($year, $week)->format('Y-m-d'), //start date
(new DateTime())->setISODate($year, $week, 7)->format('Y-m-d') //end date
];
}
Run Code Online (Sandbox Code Playgroud)
该setISODate()
函数有三个参数:$year
,$week
和$day
,$day
默认为1 - 一周的第一天.因此,我们通过7来获得第7天的确切日期$week
.
小智 10
使用"[year] W [week] [day]"strtotime格式的稍微整洁的解决方案:
function getStartAndEndDate($week, $year) {
// Adding leading zeros for weeks 1 - 9.
$date_string = $year . 'W' . sprintf('%02d', $week);
$return[0] = date('Y-n-j', strtotime($date_string));
$return[1] = date('Y-n-j', strtotime($date_string . '7'));
return $return;
}
Run Code Online (Sandbox Code Playgroud)
最短的方法:
function week_date($week, $year){
$date = new DateTime();
return "first day of the week is ".$date->setISODate($year, $week, "1")->format('Y-m-d')
."and last day of the week is ".$date->setISODate($year, $week, "7")->format('Y-m-d');
}
echo week_date(12,2014);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
80245 次 |
最近记录: |