Php 确定选择日期的星期

Php 确定选择日期的星期,php,Php,我正在努力完成以下任务。我正在开发一个带有三个视图(日、周和月)的自定义日历,可能已经有了一些东西,但我也在重写它,作为我学习工具的一部分 所以当用户第一次访问时,他们将使用Day view,当然,箭头可以来回移动到第二天或前一天。如果他们点击周视图,它会给他们一个7天的概览,默认日期为今天,并且他们可以再次回到下周或前一周。最后一个视图是完整的月历,一旦他们单击该天,它将为他们提供该天的详细信息,同时将默认值重置为他们选择的日期。因此,如果他们返回到周视图,他们将看到周的详细信息,包括他们选择

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

所以当用户第一次访问时,他们将使用Day view,当然,箭头可以来回移动到第二天或前一天。如果他们点击周视图,它会给他们一个7天的概览,默认日期为今天,并且他们可以再次回到下周或前一周。最后一个视图是完整的月历,一旦他们单击该天,它将为他们提供该天的详细信息,同时将默认值重置为他们选择的日期。因此,如果他们返回到周视图,他们将看到周的详细信息,包括他们选择的日期。这就是我难以理解的地方,我知道有一些PHP函数可以确定一周中的哪一天,但我似乎无法考虑如何传递日期,以及如何从周日开始计算一周中传递的日期。例如,如果我在2012年12月10日通过考试,我想在2012年7月10日至12月13日这一周开始

衷心感谢您的帮助或指出正确的方向。请原谅我的语法/拼写错误。

使用
strotime()
函数和
date()
函数执行此任务

例如,2012年10月9日前一天

echo date('Y-m-d', strtotime("2012-10-09 -1 day"));

根据智慧的答案,你可以通过几个步骤找到一周的第一天。查看以获得更多选项,但我相信以下代码将起作用:

// 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}! ";
  • 假设
    $selection
    将用户选择的日期表示为 整数时间戳,
    date('N',$selection)
    将返回一个数字 代表他们选择的一周中的某一天(例如星期一= 1至周日=7)

    此结果还表示自启动后的天数 所选星期(前一个星期日)$offset。当然,如果 您将从所选用户的字符串表示形式开始 日期(如您的问题,2012年12月10日),您首先需要 将日期转换为整数时间戳

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

  • 现在您可以使用
    $offset
    来确定开始日期 星期(前一个星期日)$weekstart

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

  • 一旦你有了一周的开始,一周的结束 (
    $weekend
    )当然是6天后,但要计算这个 日期,您首先需要将
    $weekstart
    从整数转换为整数 将时间戳转换为日期的字符串表示形式。您还需要将结果(
    $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
    


    见:




    尝试此功能(来源:)

    您感兴趣的日期是
    $date
    (YYYY-MM-DD格式)和
    $rollover
    全天格式(例如星期五)

    函数getWeeks($date,$rollover)
    {
    $cut=substr($date,0,8);
    $daylen=86400;
    $timestamp=strottime($date);
    $first=strottime($cut.00”);
    $passed=($timestamp-$first)/$daylen;
    $i=1;
    $weeks=1;
    
    对于($i;$i
    date('N'))给你一周的时间,例如星期二= 2。星期日星期六范围覆盖的那一天将是CurdieT2-> CurDe+4-谢谢贾景晖,这是我需要的。你应该考虑在JavaScript框架中像JQuery那样对服务器进行Ajax调用,或者像Paple提供的PHP包。这会使你的生活变得简单多了,B。相信我,你仍然会学到很多。谢谢你,托弗,当解决方案完全如你所解释的那样清晰时,我往往会过度复杂我的思维过程。
    
    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;
    }