PHP周日减去一周

时间:2016-07-10 19:03:46

标签: php mysql codeigniter date strtotime

我是php和codeigniter的新手。

我有一个功能,用于标记骑自行车的每周总公里数的图表的x轴。它通过从今天的零日子或者数组传递的零星期日或者1,2,3等数据开始计数来工作(或者应该工作)。

我使用的是PHP 5.6.19版,这是我的代码:

在模型中:

    public function  week_start($date, $counter){
        $tstring = strtotime($date);
        $wknumber = ($counter + 1);
        $start =  strtotime("-$wknumber weeks sunday", $tstring);
    return array(date('M d', $start));}

在控制器中:

$datenumbers = array(0, 1, 2, 3, 4, 5, 6, 7);
$dateResult = $this->bike_model->week_start(date("Y/m/d"), $datenumber);

在视图中:

            for ($i = 0; $i < 8; $i++){
            echo "<text class = \"axis\" y = \"357\" x = \"";
            echo 26 + ($i*70);
            echo "\" dy = \".35em\">";
            echo $dates_for_table[$i];}

我已经玩了好几天,并且它已经显示在7月3日星期日作为我x-axis上的第一个号码,就像它应该有的那样。但今天是星期天,我希望它现在说7月10日星期日是我最近的一周。但是,它仍然显示在上周日!

所以我的问题是,这里是否存在错误,或者我是否误解了 - 周日一周&#39;应该管用?

我的目标是让我的函数为零,因为参数返回最近一周的开始 - 如果是星期日或过去星期日,则返回当前星期日。我找到了一个解决方法,通过在函数中添加if else来检查它是否是星期日。

if ($tstring == strtotime('this Sunday')){
    $wknumber = $counter;}

else{
$wknumber = ($counter + 1);}

然而,这感觉很笨重,我正在寻找一种更优雅的方式。我也想了解&#34; - 周日和#34;因为我以为我已经理解它是如何运作的。

谢谢!

1 个答案:

答案 0 :(得分:0)

以下是我使用面向对象的DateTime样式做类似的事情:

$startDate = new DateTime('NOW'); // can pass date string if not today

# reset start date to last Sunday or today if it is Sunday:
$startDate->sub(new DateInterval('P'.($startDate->format('w')).'D'));

# for debugging, output first Sunday:
echo $startDate->format('Y-m-d H:i:s') . " => full date and time (check for timezone issues) \n\n";

$weeks = 8;
for ($i = 0; $i < $weeks; $i++) {
    # don't decrement first pass; sub 1 week on subsequent:
    $startDate->sub(new DateInterval('P'. (($i) ? 1 : 0) .'W'));
    echo $startDate->format('Y-m-d') . "\n";
};

你应该能够适应你的目的。

如果你想获得幻想,你也可以使用DatePeriod而不是在循环中使用sub

$period = new DatePeriod(
    $startDate,
    DateInterval::createFromDateString('-1 week'),
    7
);
foreach ($period as $date) {
    echo $date->format('Y-m-d') . "\n";
}