用PHP获取上个星期天的约会

时间:2013-03-04 07:29:31

标签: php mysql datetime cron

我正在使用 cron job 来生成关于我的数据库的每周报告。基本上,报告生成脚本是PHP。我安排了每日一次的cron工作。

我的报告周将于周日开始。

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

以p为例。

  

今天是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));

非常感谢任何帮助。谢谢。

6 个答案:

答案 0 :(得分:20)

上周日

echo date('Y-m-d',strtotime('last sunday'));

编辑答案:

上周日的上周日

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

答案 1 :(得分:3)

简介

老实说,我不确定is it possible using function?的意思,但我想你想要一个通用函数,但我认为一个简单的类也可以做到这一点。

<强>观察

  

它也应该只运行2013年2月24日至2013年3月3日的报告。

请注意,从Sunday 24 Feb 2013Sunday 3 March 2013 8 days1 weeks以上可能会导致overlapping数据,如果您正在绘制图形或使用它用于分析。我建议您将其限制在1 weeks Sunday, 24 Feb 2013Saturday, 2 March 2013

这就是我的意思

// 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

其他例子

示例1

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

输出

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

//or
Sunday, 31 March 2013

示例2

让我们想象一下,您希望获得“{1}}的报告,即”2月14日之前“

before valentine period

输出

print_r($date->getPeroid(new DateTime("2013-02-14")));

示例3

让我们想象你想要一个日期范围而不是一个范围,例如。您希望stdClass Object ( [start] => Sunday, 03 February 2013 [end] => Saturday, 09 February 2013 ) st January 1之间的日期(可能您想将其用于选择框),然后使用{{1 }}

Current Time

输出

PeroidDate::getBetween

使用的课程

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

答案 2 :(得分:3)

<?php
$date=date("Y-m-d");
echo "Current Date : ".$date."<br>";
echo "last Sunday : ".date('Y-m-d', strtotime($date.'last sunday'));
?> 

答案 3 :(得分:1)

使用此代码。

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

你可以按照今天的上周日获得。

答案 4 :(得分:1)

试试这个

$sun =  date('Y-m-d',strtotime('last sunday'));
echo date('Y-m-d', strtotime('last Sunday', strtotime($sun)));

它将返回2013-02-24

答案 5 :(得分:1)

由于此问题也标记为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():

SELECT *
FROM   your_tables
WHERE  ... AND
       report_date BETWEEN
         CURDATE() - INTERVAL (WEEKDAY(CURDATE())+1) % 7 DAY - INTERVAL 1 WEEK
         AND CURDATE() - INTERVAL (WEEKDAY(CURDATE())+1) % 7 DAY