我正在尝试完成以下任务。我正在开发一个包含三个视图(日,周和月)的自定义日历,可能已经有了一些东西,但我也在重写这个作为学习工具的一部分。
因此,当用户第一次访问时,用户将面对Day视图,箭头可以来回到第二天或前一天。如果他们点击周视图,它将为他们提供7天的概述,默认为今天的日期,并且他们可以再次来回到下周或上周。最后一个视图是完整月份日历,一旦他们点击当天,它将为他们提供当天的详细信息,同时将默认值重置为他们选择的日期。因此,如果他们回到周视图,他们会看到本周的详细信息包含他们选择的那一天。这是我无法解决问题的地方,我知道有一些PHP函数可以确定星期几,但我似乎无法考虑如何传递日期并从周日开始整整一周那天过去了。例如,如果我在2012年12月10日过世,我想在2012年7月10日 - 12月13日开始这一周。
谢谢你的帮助或指向正确的方向。请原谅我的语法/拼写错误。
答案 0 :(得分:2)
假设$selection
表示用户选择的日期为
整数时间戳,date('N', $selection)
将返回一个数字
表示他们选择的星期几(例如星期一=
1到星期日= 7)。
此结果还表示自开始以来的天数
所选周(上周日) - $offset
。当然,如果
您将从所选用户的字符串表示开始
日期(如你的问题,10/12/2012),你首先需要
将日期转换为整数时间戳。
$selection = strtotime($selection); //if $selection is in string format
$offset = date('N', $selection);
现在您可以使用$offset
来确定开头的日期
周(上周日) - $weekstart
。
$weekstart = strtotime("$selection -$offset day");
一旦你有一周的开始,一周结束
($weekend
)当然是6天后,但计算一下
日期,您首先需要从整数转换$weekstart
timestamp到日期的字符串表示形式。您还需要将结果($weekend
)转换为日期的字符串表示形式。
$weekstart = stringftime("%m/%d/%Y", $weekstart); //date format = 10/07/2012
$weekend = strtotime("$weekstart +6 day");
$weekend = stringftime("%m/%d/%Y", $weekend);
以下内容:
$selection = "10/12/2012";
$selection = strtotime($selection);
$offset = date('N', $selection);
$weekstart = strtotime("$selection -$offset day");
$weekstart = stringftime("%m/%d/%Y", $weekstart);
$weekend = strtotime("$weekstart +6 day");
$weekend = stringftime("%m/%d/%Y", $weekend);
$output = "Selected Date = $selection \n Selected Week = $weekstart - $weekend";
echo $output;
结果:
Selected Date = 10/12/2012
Selected Week = 10/07/2012 - 10/13/2020
请参阅:
http://php.net/manual/en/function.date.php
http://php.net/manual/en/function.strtotime.php
http://php.net/manual/en/function.strftime.php
答案 1 :(得分:0)
使用strtotime()
函数结合date()
函数执行此任务
例如。 2012-10-09前一天是
echo date('Y-m-d', strtotime("2012-10-09 -1 day"));
答案 2 :(得分:0)
以Wisdom的答案为基础,您可以分几步找到一周的第一天。查看PHP date() manual以获取更多选项,但我相信以下代码可以正常运行:
// figure out how many days back you have to go, to get to Sunday
$d = date('N', strtotime($mydate));
// figure out Sunday's date
$beginning_of_week = date('Y-m-d', strtotime($mydate." -{$d} days"));
$end_of_week = date('Y-m-d', strtotime($beginning_of_week." +1 week"));
echo "The week {$beginning_of_week} to {$end_of_week}! ";
答案 3 :(得分:0)
尝试此功能(来源:Marty Wallace)。
您感兴趣的日期为$date
(YYYY-MM-DD格式),$rollover
为全日格式(例如星期五)。
function getWeeks($date, $rollover)
{
$cut = substr($date, 0, 8);
$daylen = 86400;
$timestamp = strtotime($date);
$first = strtotime($cut . "00");
$elapsed = ($timestamp - $first) / $daylen;
$i = 1;
$weeks = 1;
for($i; $i<=$elapsed; $i++)
{
$dayfind = $cut . (strlen($i) < 2 ? '0' . $i : $i);
$daytimestamp = strtotime($dayfind);
$day = strtolower(date("l", $daytimestamp));
if($day == strtolower($rollover)) $weeks ++;
}
return $weeks;
}