获取PHP中的上周日日期
我正在使用cron作业在数据库上生成每周报告。基本上,报告生成脚本是用PHP编写的。我安排了每天的cron任务 我的报告周从周日开始 我只希望报告生成脚本生成从上周日到上周一的前一周报告 比如说 今天是2013年3月4日。当脚本运行时,它应该生成 2013年2月24日至2013年3月3日的报告。明天,当剧本 运行时,它还应仅运行2013年2月24日至2013年3月3日的报告 如何在脚本中自动获取上一个周日的日期 目前,我使用以下硬代码:获取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
$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,你的意思是你正在一台实时生产服务器上开发和调试吗?哦,我的。。。