php - 在 PHP 中获取给定一周的开始和结束天数

标签 php datetime

我正在尝试使用星期日作为开始日期和引用日期(例如 $date)来获取周范围,但我似乎无法弄清楚。

例如,如果 $date 为 2009-05-01,我将得到 2009-04-26 和 2009-05-02。 2009-05-10 将产生 2009-05-10 和 2009-05-16。我当前的代码如下所示(我不记得我是从哪里提取它的,因为我忘记在评论中写下 url):

function x_week_range(&$start_date, &$end_date, $date)
{
    $start_date = '';
    $end_date = '';
    $week = date('W', strtotime($date));
    $week = $week;

    $start_date = $date;

    $i = 0;
    while(date('W', strtotime("-$i day")) >= $week) {
        $start_date = date('Y-m-d', strtotime("-$i day"));
        $i++;
    }

    list($yr, $mo, $da) = explode('-', $start_date);

    $end_date = date('Y-m-d', mktime(0, 0, 0, $mo, $da + 6, $yr));
}

我意识到它所做的只是将当前日期增加 7 天。你会怎么做?

最佳答案

我会利用 PHP 的 strtotime真棒:

function x_week_range(&$start_date, &$end_date, $date) {
    $ts = strtotime($date);
    $start = (date('w', $ts) == 0) ? $ts : strtotime('last sunday', $ts);
    $start_date = date('Y-m-d', $start);
    $end_date = date('Y-m-d', strtotime('next saturday', $start));
}

对您提供的数据进行了测试并且有效。不过,我不是特别喜欢你正在进行的整个引用工作。如果这是我的功能,我会像这样:

function x_week_range($date) {
    $ts = strtotime($date);
    $start = (date('w', $ts) == 0) ? $ts : strtotime('last sunday', $ts);
    return array(date('Y-m-d', $start),
                 date('Y-m-d', strtotime('next saturday', $start)));
}

然后这样调用它:

list($start_date, $end_date) = x_week_range('2009-05-10');

我不太喜欢为这样的事情做数学。日期很棘手,我更喜欢用 PHP 来解决。

关于php - 在 PHP 中获取给定一周的开始和结束天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/923925/

相关文章:

php - WHMCS Action Hook

PHP:将变量从下拉列表发送到 URL

mysql - 如何在数据库中存储非常旧的日期?

mysql - 在 MySQL 中格式化日期以返回 MonthName,Year

javascript - javascript 从哪里获取日期

php - Yii2 - 如何获取从 Controller 传递的所有 View 参数?

php - 如何每 30 分钟自动运行一次脚本,将输出数据存储在我的服务器上,并提醒我有关更改?

PHP:为一个文件而不是 php.ini 设置 max_file_uploads

python-3.x - 日期时间、 Pandas 和时区问题 : AttributeError: 'datetime.timezone' object has no attribute '_utcoffset'

javascript - 确保多个不重叠时间范围的好方法