2

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

因此,用户在第一次访问时将面对日视图,当然还有箭头来回切换到第二天或前一天。如果他们单击“周视图”,它将为他们提供 7 天概览,默认为今天日期,并且他们可以再次来回查看下周或前一周。最后一个视图是完整的月历,一旦他们单击日期,它将为他们提供当天的详细信息,同时将默认设置为他们选择的日期。因此,如果他们返回周视图,他们将看到周的详细信息包含他们选择的日期。这是我难以解决的问题,我知道有 PHP 函数可以确定星期几,但我似乎无法考虑如何传递日期并从周日开始获得整周过去的那一天。例如,

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

4

4 回答 4

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

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

    $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从整数时间戳转换为日期的字符串表示形式。您还需要将结果 ( $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

于 2012-10-12T16:44:28.417 回答
0

基于智慧的答案,您可以通过几个步骤找到一周的第一天。查看PHP date() 手册以获取更多选项,但我相信以下代码会起作用:

// 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}! ";
于 2012-10-12T15:52:09.767 回答
0

使用strtotime()函数和date()函数来完成这个任务

例如。2012-10-09 前 1 天是

echo date('Y-m-d', strtotime("2012-10-09 -1 day"));
于 2012-10-12T15:44:01.153 回答
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;
}
于 2012-10-12T18:21:31.293 回答