选择一天时确定一周

时间:2012-10-12 15:40:17

标签: php

我正在尝试完成以下任务。我正在开发一个包含三个视图(日,周和月)的自定义日历,可能已经有了一些东西,但我也在重写这个作为学习工具的一部分。

因此,当用户第一次访问时,用户将面对Day视图,箭头可以来回到第二天或前一天。如果他们点击周视图,它将为他们提供7天的概述,默认为今天的日期,并且他们可以再次来回到下周或上周。最后一个视图是完整月份日历,一旦他们点击当天,它将为他们提供当天的详细信息,同时将默认值重置为他们选择的日期。因此,如果他们回到周视图,他们会看到本周的详细信息包含他们选择的那一天。这是我无法解决问题的地方,我知道有一些PHP函数可以确定星期几,但我似乎无法考虑如何传递日期并从周日开始整整一周那天过去了。例如,如果我在2012年12月10日过世,我想在2012年7月10日 - 12月13日开始这一周。

谢谢你的帮助或指向正确的方向。请原谅我的语法/拼写错误。

4 个答案:

答案 0 :(得分:2)

  1. 假设$selection表示用户选择的日期为 整数时间戳,date('N', $selection)将返回一个数字 表示他们选择的星期几(例如星期一= 1到星期日= 7)。

    此结果还表示自开始以来的天数 所选周(上周日) - $offset。当然,如果 您将从所选用户的字符串表示开始 日期(如你的问题,10/12/2012),你首先需要 将日期转换为整数时间戳。

    $selection = strtotime($selection); //if $selection is in string format
    $offset = date('N', $selection);
    


  2. 现在您可以使用$offset来确定开头的日期 周(上周日) - $weekstart

    $weekstart = strtotime("$selection -$offset day");
    


  3. 一旦你有一周的开始,一周结束 ($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);
    



  4. 以下内容:

    $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;
}