PHP减去一周星期日

标签 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));}

在 Controller 中:

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

在 View 中:

            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 日星期日将成为我最近的一周。然而,上周日它仍在放映!

所以我的问题是,这里是否存在错误,或者我是否误解了“- 一周星期日”应该如何工作?

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

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

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

但是,这感觉很笨拙,我正在寻找一种更优雅的方式。我还想了解“- 一周星期日”出了什么问题,因为我以为我已经了解它是如何工作的。

谢谢!

最佳答案

以下是我如何使用面向对象的 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";
}

关于PHP减去一周星期日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38295510/

相关文章:

php - 从 CLI OSX 退出 PHP

MySQL 在大型 InnoDB 表上查找单位数字值的 SELECT 速度很慢

php - 如何在库 codeigniter 上调用私有(private)方法

php - fatal error : Call to a member function fetch_assoc() on a non-object

php - Hash 类型的属性 '#/' 与一个或多个所需架构不匹配

mysql - 查询上一行值并合并到当前行

php - fatal error : Uncaught exception 'PDOException' with message 'SQLSTATE[42000]:

php - 全局创建者,任何插入查询的时间跨度

php - php codeigniter中的多维数组

php - 在 Cloud Foundry 上部署开源 CMS 'my little forum'(需要 PHP 和 MySQL)