我试图用星期日作为开始日期和参考日期来获得星期范围,比方说$date,但我似乎无法弄明白.
例如,如果我在2009-05-01获得$ date,我会得到2009-04-26和2009-05-02.2009-05-10将产生2009-05-10和2009-05-16.我当前的代码看起来像这样(我不记得我从哪里取出它,因为我忘记在我的评论中记下网址):
function x_week_range(&$start_date, &$end_date, $date)
{
$start_date = '';
$end_date = '';
$week = date('W', strtotime($date));
$week = $week;
$start_date = $date;
$i = 0;
while(date('W', strtotime("-$i day")) >= $week) {
$start_date = date('Y-m-d', strtotime("-$i day"));
$i++;
}
list($yr, $mo, $da) = explode('-', $start_date);
$end_date = date('Y-m-d', mktime(0, 0, 0, $mo, $da + 6, $yr));
}
Run Code Online (Sandbox Code Playgroud)
我意识到它所做的只是在当前日期增加了7天.你会怎么做?
Pao*_*ino 86
我会利用PHP的strtotime awesomeness:
function x_week_range(&$start_date, &$end_date, $date) {
$ts = strtotime($date);
$start = (date('w', $ts) == 0) ? $ts : strtotime('last sunday', $ts);
$start_date = date('Y-m-d', $start);
$end_date = date('Y-m-d', strtotime('next saturday', $start));
}
Run Code Online (Sandbox Code Playgroud)
测试您提供的数据,它的工作原理.不过,我并不特别喜欢你所参考的整个参考资料.如果这是我的功能,我会这样:
function x_week_range($date) {
$ts = strtotime($date);
$start = (date('w', $ts) == 0) ? $ts : strtotime('last sunday', $ts);
return array(date('Y-m-d', $start),
date('Y-m-d', strtotime('next saturday', $start)));
}
Run Code Online (Sandbox Code Playgroud)
并称之为:
list($start_date, $end_date) = x_week_range('2009-05-10');
Run Code Online (Sandbox Code Playgroud)
对于像这样的事情我不是很喜欢做数学的人.日期很棘手,我更喜欢让PHP搞清楚.
jjw*_*ign 21
对于仍然使用mktime(),strtotime()和其他PHP函数的每个人来说,试试PHP5 DateTime类.起初我很犹豫,但它真的很容易使用.不要忘记使用clone()来复制对象.
编辑:最近编辑了此代码以处理当天是星期日的情况.在这种情况下,我们必须得到过去的星期六,然后再添加一天来获得星期天.
$dt_min = new DateTime("last saturday"); // Edit
$dt_min->modify('+1 day'); // Edit
$dt_max = clone($dt_min);
$dt_max->modify('+6 days');
Run Code Online (Sandbox Code Playgroud)
然后根据需要进行格式化.
echo 'This Week ('.$dt_min->format('m/d/Y').'-'.$dt_max->format('m/d/Y').')';
Run Code Online (Sandbox Code Playgroud)
确保在代码中尽早设置时区.
date_default_timezone_set('America/New_York');
Run Code Online (Sandbox Code Playgroud)
显然'w'格式化date()或DateTime对象的格式方法将返回星期几作为数字(默认情况下,0 =星期日,1 =星期一等)
您可以将此值减去并将其值减去当天的天数以查找本周的开头.
$start_date = new DateTime("2009-05-13");
$day_of_week = $start_date->format("w");
$start_date->modify("-$day_of_week day");
Run Code Online (Sandbox Code Playgroud)
$ start_date现在将等于该周的星期日,从那里你可以添加7天来获得本周结束或者你有什么.