获取PHP中的上周日日期

获取PHP中的上周日日期,php,mysql,datetime,cron,Php,Mysql,Datetime,Cron,我正在使用cron作业在数据库上生成每周报告。基本上,报告生成脚本是用PHP编写的。我安排了每天的cron任务 我的报告周从周日开始 我只希望报告生成脚本生成从上周日到上周一的前一周报告 比如说 今天是2013年3月4日。当脚本运行时,它应该生成 2013年2月24日至2013年3月3日的报告。明天,当剧本 运行时,它还应仅运行2013年2月24日至2013年3月3日的报告 如何在脚本中自动获取上一个周日的日期 目前,我使用以下硬代码: $startDate = strtotime("13 Ja

我正在使用cron作业在数据库上生成每周报告。基本上,报告生成脚本是用PHP编写的。我安排了每天的cron任务

我的报告周从周日开始

我只希望报告生成脚本生成从上周日到上周一的前一周报告

比如说

今天是2013年3月4日。当脚本运行时,它应该生成 2013年2月24日至2013年3月3日的报告。明天,当剧本 运行时,它还应仅运行2013年2月24日至2013年3月3日的报告

如何在脚本中自动获取上一个周日的日期

目前,我使用以下硬代码:

$startDate = strtotime("13 January 2013");

$strStartDate = date ("Y-m-d 00:00:00", $startDate);
$strEndDate = date ("Y-m-d 23:59:00", $startDate + (6*24*60*60));
非常感谢您的帮助。谢谢。

使用此代码

echo date('m/d/Y', strtotime('last Sunday'));

您可以根据今天获得上周日。

上周日

echo date('Y-m-d',strtotime('last sunday'));
echo date('Y-m-d',strtotime('last sunday -7 days')); 
编辑答案:

最后一个星期日

echo date('Y-m-d',strtotime('last sunday'));
echo date('Y-m-d',strtotime('last sunday -7 days')); 
试试这个

$sun =  date('Y-m-d',strtotime('last sunday'));
echo date('Y-m-d', strtotime('last Sunday', strtotime($sun)));
它将返回
2013-02-24

简介 老实说,我不确定你所说的
是什么意思,是否可以使用函数?
但我想你想要一个通用函数,但我认为一个简单的类也可以做到这一点

观察

它还应仅在2013年2月24日至2013年3月3日期间运行报告

请注意,从2013年2月24日(星期日)到2013年3月3日(星期日)的
时间为
8天
,超过
1周
,如果您正在绘制图形或将其用于分析,可能会导致
数据重叠。我建议您将时间限制为
1周
,即
2013年2月24日星期日
2013年3月2日星期六

这就是我的意思

// imagine today is Today is 4 March 2013
$today = DateTime::createFromFormat("d F Y", "4 March 2013");

$date = new PeroidDate();
vprintf("%s to %s", $date->getPeroid($today));
输出

 Sunday, 24 February 2013 to Saturday, 02 March 2013
stdClass Object
(
    [start] => Sunday, 31 March 2013
    [end] => Saturday, 06 April 2013
)

//or
Sunday, 31 March 2013
stdClass Object
(
    [start] => Sunday, 03 February 2013
    [end] => Saturday, 09 February 2013
)
Array
(
    [0] => stdClass Object
        (
            [start] => Sunday, 06 January 2013
            [end] => Saturday, 12 January 2013
        )

    [1] => stdClass Object
        (
            [start] => Sunday, 13 January 2013
            [end] => Saturday, 19 January 2013
        )

    [2] => stdClass Object
        (
            [start] => Sunday, 20 January 2013
            [end] => Saturday, 26 January 2013
        )

    [3] => stdClass Object
        (
            [start] => Sunday, 27 January 2013
            [end] => Saturday, 02 February 2013
        )

    [4] => stdClass Object
        (
            [start] => Sunday, 03 February 2013
            [end] => Saturday, 09 February 2013
        )

    [5] => stdClass Object
        (
            [start] => Sunday, 10 February 2013
            [end] => Saturday, 16 February 2013
        )

    [6] => stdClass Object
        (
            [start] => Sunday, 17 February 2013
            [end] => Saturday, 23 February 2013
        )

    [7] => stdClass Object
        (
            [start] => Sunday, 24 February 2013
            [end] => Saturday, 02 March 2013
        )

    [8] => stdClass Object
        (
            [start] => Sunday, 03 March 2013
            [end] => Saturday, 09 March 2013
        )

    [9] => stdClass Object
        (
            [start] => Sunday, 10 March 2013
            [end] => Saturday, 16 March 2013
        )

    [10] => stdClass Object
        (
            [start] => Sunday, 17 March 2013
            [end] => Saturday, 23 March 2013
        )

    [11] => stdClass Object
        (
            [start] => Sunday, 24 March 2013
            [end] => Saturday, 30 March 2013
        )

    [12] => stdClass Object
        (
            [start] => Sunday, 31 March 2013
            [end] => Saturday, 06 April 2013
        )

    [13] => stdClass Object
        (
            [start] => Sunday, 07 April 2013
            [end] => Saturday, 13 April 2013
        )

)
其他例子 示例1

// Example
$date = new PeroidDate();
print_r($date->getPeroid());
输出

 Sunday, 24 February 2013 to Saturday, 02 March 2013
stdClass Object
(
    [start] => Sunday, 31 March 2013
    [end] => Saturday, 06 April 2013
)

//or
Sunday, 31 March 2013
stdClass Object
(
    [start] => Sunday, 03 February 2013
    [end] => Saturday, 09 February 2013
)
Array
(
    [0] => stdClass Object
        (
            [start] => Sunday, 06 January 2013
            [end] => Saturday, 12 January 2013
        )

    [1] => stdClass Object
        (
            [start] => Sunday, 13 January 2013
            [end] => Saturday, 19 January 2013
        )

    [2] => stdClass Object
        (
            [start] => Sunday, 20 January 2013
            [end] => Saturday, 26 January 2013
        )

    [3] => stdClass Object
        (
            [start] => Sunday, 27 January 2013
            [end] => Saturday, 02 February 2013
        )

    [4] => stdClass Object
        (
            [start] => Sunday, 03 February 2013
            [end] => Saturday, 09 February 2013
        )

    [5] => stdClass Object
        (
            [start] => Sunday, 10 February 2013
            [end] => Saturday, 16 February 2013
        )

    [6] => stdClass Object
        (
            [start] => Sunday, 17 February 2013
            [end] => Saturday, 23 February 2013
        )

    [7] => stdClass Object
        (
            [start] => Sunday, 24 February 2013
            [end] => Saturday, 02 March 2013
        )

    [8] => stdClass Object
        (
            [start] => Sunday, 03 March 2013
            [end] => Saturday, 09 March 2013
        )

    [9] => stdClass Object
        (
            [start] => Sunday, 10 March 2013
            [end] => Saturday, 16 March 2013
        )

    [10] => stdClass Object
        (
            [start] => Sunday, 17 March 2013
            [end] => Saturday, 23 March 2013
        )

    [11] => stdClass Object
        (
            [start] => Sunday, 24 March 2013
            [end] => Saturday, 30 March 2013
        )

    [12] => stdClass Object
        (
            [start] => Sunday, 31 March 2013
            [end] => Saturday, 06 April 2013
        )

    [13] => stdClass Object
        (
            [start] => Sunday, 07 April 2013
            [end] => Saturday, 13 April 2013
        )

)
示例2

假设您希望在情人节期间之前(即“2月14日之前”)获得报告

输出

 Sunday, 24 February 2013 to Saturday, 02 March 2013
stdClass Object
(
    [start] => Sunday, 31 March 2013
    [end] => Saturday, 06 April 2013
)

//or
Sunday, 31 March 2013
stdClass Object
(
    [start] => Sunday, 03 February 2013
    [end] => Saturday, 09 February 2013
)
Array
(
    [0] => stdClass Object
        (
            [start] => Sunday, 06 January 2013
            [end] => Saturday, 12 January 2013
        )

    [1] => stdClass Object
        (
            [start] => Sunday, 13 January 2013
            [end] => Saturday, 19 January 2013
        )

    [2] => stdClass Object
        (
            [start] => Sunday, 20 January 2013
            [end] => Saturday, 26 January 2013
        )

    [3] => stdClass Object
        (
            [start] => Sunday, 27 January 2013
            [end] => Saturday, 02 February 2013
        )

    [4] => stdClass Object
        (
            [start] => Sunday, 03 February 2013
            [end] => Saturday, 09 February 2013
        )

    [5] => stdClass Object
        (
            [start] => Sunday, 10 February 2013
            [end] => Saturday, 16 February 2013
        )

    [6] => stdClass Object
        (
            [start] => Sunday, 17 February 2013
            [end] => Saturday, 23 February 2013
        )

    [7] => stdClass Object
        (
            [start] => Sunday, 24 February 2013
            [end] => Saturday, 02 March 2013
        )

    [8] => stdClass Object
        (
            [start] => Sunday, 03 March 2013
            [end] => Saturday, 09 March 2013
        )

    [9] => stdClass Object
        (
            [start] => Sunday, 10 March 2013
            [end] => Saturday, 16 March 2013
        )

    [10] => stdClass Object
        (
            [start] => Sunday, 17 March 2013
            [end] => Saturday, 23 March 2013
        )

    [11] => stdClass Object
        (
            [start] => Sunday, 24 March 2013
            [end] => Saturday, 30 March 2013
        )

    [12] => stdClass Object
        (
            [start] => Sunday, 31 March 2013
            [end] => Saturday, 06 April 2013
        )

    [13] => stdClass Object
        (
            [start] => Sunday, 07 April 2013
            [end] => Saturday, 13 April 2013
        )

)
示例3

假设您想要一个日期范围而不是单个范围,例如,您希望日期介于
1月1日
st和
当前时间
(可能您希望将其用于选择框)之间,然后使用
PeroidDate::getBetween

print_r($date->getBetween(new DateTime("2013-1-1"), new DateTime()));
输出

 Sunday, 24 February 2013 to Saturday, 02 March 2013
stdClass Object
(
    [start] => Sunday, 31 March 2013
    [end] => Saturday, 06 April 2013
)

//or
Sunday, 31 March 2013
stdClass Object
(
    [start] => Sunday, 03 February 2013
    [end] => Saturday, 09 February 2013
)
Array
(
    [0] => stdClass Object
        (
            [start] => Sunday, 06 January 2013
            [end] => Saturday, 12 January 2013
        )

    [1] => stdClass Object
        (
            [start] => Sunday, 13 January 2013
            [end] => Saturday, 19 January 2013
        )

    [2] => stdClass Object
        (
            [start] => Sunday, 20 January 2013
            [end] => Saturday, 26 January 2013
        )

    [3] => stdClass Object
        (
            [start] => Sunday, 27 January 2013
            [end] => Saturday, 02 February 2013
        )

    [4] => stdClass Object
        (
            [start] => Sunday, 03 February 2013
            [end] => Saturday, 09 February 2013
        )

    [5] => stdClass Object
        (
            [start] => Sunday, 10 February 2013
            [end] => Saturday, 16 February 2013
        )

    [6] => stdClass Object
        (
            [start] => Sunday, 17 February 2013
            [end] => Saturday, 23 February 2013
        )

    [7] => stdClass Object
        (
            [start] => Sunday, 24 February 2013
            [end] => Saturday, 02 March 2013
        )

    [8] => stdClass Object
        (
            [start] => Sunday, 03 March 2013
            [end] => Saturday, 09 March 2013
        )

    [9] => stdClass Object
        (
            [start] => Sunday, 10 March 2013
            [end] => Saturday, 16 March 2013
        )

    [10] => stdClass Object
        (
            [start] => Sunday, 17 March 2013
            [end] => Saturday, 23 March 2013
        )

    [11] => stdClass Object
        (
            [start] => Sunday, 24 March 2013
            [end] => Saturday, 30 March 2013
        )

    [12] => stdClass Object
        (
            [start] => Sunday, 31 March 2013
            [end] => Saturday, 06 April 2013
        )

    [13] => stdClass Object
        (
            [start] => Sunday, 07 April 2013
            [end] => Saturday, 13 April 2013
        )

)
使用的类
class PeroidDate{
私人$格式;
私人时间间隔;
函数_u构造(){
$this->format=“l,dfy”;
$this->interval=newdateinterval('P7D');
}
函数setFormat($format){
$this->format=(字符串)$format;
}
函数setInterval(DateInterval$格式){
$this->format=$format;
}
函数getPeroid(\Datetime$date=null){
$end=$date?:新建日期时间();
$end->modify(“上周日”);
打印($end->format($this->format));
$start=clone$end;
$start->sub($this->interval);
$end->modify(“-1天”)//
返回(对象)数组(
“开始”=>$start->format($this->format),
“end”=>end->format($this->format)
);
}
函数getBetween(Datetime$start=null,Datetime$end=null){
如果($start>$end)
抛出新的InvalidArgumentException(`Start date`必须大于`End date`);
如果($start==null){
$start=new DateTime();
$start->modify(“1月的第一个星期日”);
}否则{
$start->modify(“第一个星期日”);
}
如果($end==null){
$end=新的日期时间();
$end->modify(“12月的最后一个星期日”);
}
$range=array();
while($start<$end){
$r=新的stdClass();
$r->start=$start->format($this->format);
$start->add($this->interval);
$tmp=clone$start;
$tmp->修改(“-1天”);
$r->end=$tmp->format($this->format);
$range[]=$r;
}
返回$range;
}
}

由于这个问题也被标记为MySql,如果您需要在查询中计算时间间隔,您可以使用以下方法:

SELECT
  '2013-03-04' - INTERVAL (WEEKDAY('2013-03-04')+1) % 7 DAY - INTERVAL 1 WEEK start_date,
  '2013-03-04' - INTERVAL (WEEKDAY('2013-03-04')+1) % 7 DAY end_date
然后,要生成报告,只需使用CURDATE():



谢谢,但如何自动提供第二个参数?那么,脚本可以自动运行,它将始终返回最后一个星期天的日期?例如,当脚本今天运行时,它应该返回2013年2月24日。您所说的
是什么意思?是否可以使用将返回2013-03-03的函数?
。但我需要的是2013-02-24。也许我应该说最后一个星期天?@J K:最后一个星期天是3月3日。@zerkms我想他想要最后一个sunday@zerkms,对不起,我想我应该说我上星期天要去上班。苏米特-7?但是,脚本将每天运行,并且应该始终在上周日返回,直到下一周。例如,今天它应该返回2013-02-24。明天,它也应该返回2013-02-24,后天,它也应该返回2013-02-24。。。。然后在2013年Mac 10月10日,它将开始返回2013-03-03。J K,你的意思是你正在一台实时生产服务器上开发和调试吗?哦,我的。。。