Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 计算更改周和月的开始和结束?_Php_Sql_Date_Time_Calendar - Fatal编程技术网

Php 计算更改周和月的开始和结束?

Php 计算更改周和月的开始和结束?,php,sql,date,time,calendar,Php,Sql,Date,Time,Calendar,目前,我正在使用jQuery日历插件来显示我构建的日历。所有数据都是使用PHP从SQL数据库中填写的。我正处在日历的关键时刻,我需要在时间上开始前进和后退。这一周、一个月来,我都很难做到这一点。就白天的景色而言,还不错 这是我今天的代码 function startTime() { $today = getdate(); $startTime = mktime(8, 0, 0, $today["mon"], $today["mday"]+$_SESSION['number'], $tod

目前,我正在使用jQuery日历插件来显示我构建的日历。所有数据都是使用PHP从SQL数据库中填写的。我正处在日历的关键时刻,我需要在时间上开始前进和后退。这一周、一个月来,我都很难做到这一点。就白天的景色而言,还不错

这是我今天的代码

function startTime() {
  $today = getdate();
  $startTime = mktime(8, 0, 0, $today["mon"], $today["mday"]+$_SESSION['number'], $today["year"]);}
然后,我将
$startTime
传递到另一个发出SQL请求的函数中<代码>$\u会话[ “number']如果以前没有设置过,则设置为0,否则根据用户点击的是下一个还是上一个,我会添加1或减去1
endTime()
几乎是相同的函数

如果可能的话,我只需要更改我的
startTime()
endTime()
函数

下面是计算日/周/月的凌乱且未经测试的代码(我们的服务器已停机)

function startTime($type)
{
    $today = getDate();
    $startTime = mktime(8, 0, 0, $today["mon"], $today["mday"]+$_SESSION['number'], $today["year"]);

    if ($type == "day")
    {
        $startTime = mktime(8, 0, 0, $today["mon"], $today["mday"]+$_SESSION['number'], $today["year"]);
    }

    if ($type == "week")
    {
        if ($today['w'] == 0)
        {
            $startTime = mktime(8, 0, 0, $today["mon"], $today["mday"]+($_SESSION['number'] * $_SESSION['multiplier']), $today['year']);
        }
        else
        {
            $day = strtotime("last Sunday");
            $today = getdate($day);
            $startTime = mktime(8, 0, 0, $today["mon"], $today["mday"]+($_SESSION['number'] * $_SESSION['multiplier']), $today['year']);
        }
    }

    if ($type == "month")
    {
        $startTime = mktime(8, 0, 0, $today["mon"]+($_SESSION['number']), 0, $today['year']);
    }

    return $startTime;
}

function endTime(type)
{
    $today = getdate();
    $endTime = mktime(20, 0, 0, $today["mon"], $today["mday"]+$_SESSION['number'], $today["year"]);

    if ($type == "day")
    {
        $endTime = mktime(20, 0, 0, $today["mon"], $today["mday"]+$_SESSION['number'], $today["year"]);
    }

    if ($type == "week")
    {
        if ($today['w'] == 6)
        {
            $endTime = mktime(20, 0, 0, $today["mon"], $today["mday"]+($_SESSION['number'] * $_SESSION['multiplier']), $today['year']);
        }
        else
        {
            $day = strtotime("next Saturday");
            $today = getdate($day);
            $endTime = mktime(20, 0, 0, $today["mon"], $today["mday"]+($_SESSION['number'] * $_SESSION['multiplier']), $today['year']);
        }
    }

    if ($type == "month")
    {
        $day = strtotime("next month - 1 hour");
        $today = getdate($day);
        $endTime = mktime(8, 0, 0, $today["mon"]+($_SESSION['number']), $today["mday"], $today['year']);
    }

    return $endTime;
}

我要感谢大家抽出时间,这是我的第一篇帖子,所以如果我的帖子中有任何不好的做法,请告诉我。我已经在stackoverflow和google上搜索了这个问题的解决方案,但还没有找到。

如果您在获取代码时遇到问题,请在以后的代码审查中使用。我将使用
strotime
而不是
mktime
,并生成一个同时返回开始和结束时间的函数:

function getTimes($type) {
    $end_number = $_SESSION['number'] + 1;
    $extra = '-1 day';
    if ($type == "day") {
        $end_number = $_SESSION['number'];
        $extra = '';
        $date_start = date('Y-m-d');
    } elseif ($type == 'week') {
        $date_start = date('Y-m-d',strtotime('now -'.date('w').' days'));
    } elseif ($type == 'month') {
        $date_start = date('Y-m-01');
    }
    $operator = '+';
    if($_SESSION['number'] < 0)  $operator = '';
    $startTime = strtotime("$date_start 08:00:00 {$operator}{$_SESSION['number']} {$type}s");
    $endTime = strtotime("$date_start 20:00:00 {$operator}{$end_number} {$type}s $extra");

    return array('startTime'=>$startTime,'endTime'=>$endTime);
}

你是在找一个错误还是在找代码审查?我应该说的是,代码审查。就像我说的,我们的服务器坏了,但我几乎肯定这个月的计算是行不通的。为了修复这个月,我想出了这个方法,但我不知道strotime是否是这样工作的
$day=strotime(“+”)$\u SESSION['number']。“month-1小时”)
$today=getdate($day)
$endTime=mktime(8,0,0,$today[“mon”]+($_SESSION[“number”]),$today[“mday”],$today[“year”])function startTime($type) {
    $times = getTimes($type);
    return $times['startTime'];
}
function endTime($type) {
    $times = getTimes($type);
    return $times['endTime'];
}