PHP:如何获取过去某个特定日期的上周日..?

Posted

技术标签:

【中文标题】PHP:如何获取过去某个特定日期的上周日..?【英文标题】:PHP: How to get previous Sunday of a specific date in the past..? 【发布时间】:2011-04-14 03:46:30 【问题描述】:

我正在从数据库中检索具有关联日期的条目。

我希望能够获取相对于该特定日期的上一个星期日和下一个星期六来填充 jQuery 日期选择器。

我知道如何处理实际时间/日期:

strtotime('last Sunday')

但我不知道如何在现在以外的日期这样做......

谢谢。

【问题讨论】:

【参考方案1】:

使用strtotime 的第二个参数指定计算“上周日”的日期和其他相对日期:

strtotime('last Sunday', strtotime('09/01/2010'));

http://us2.php.net/strtotime

例子:

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

输出:

08/29/2010

【讨论】:

不需要调用strtotime两次,可以像echo date('m/d/Y', strtotime("last sunday 09/01/2010"));一样完成【参考方案2】:

您也可以使用 datetime 类来执行此操作。下面的代码可以工作:

$date = new DateTime('09/01/2010'); $date->modify('上周日'); echo $date->format('d/m/Y');
Output: 29/08/2010

看看http://ca2.php.net/manual/en/class.datetime.php。构造函数有两个可选参数,第一个是对象的日期字符串(默认为现在),第二个是 DateTimeZone 对象(默认为 PHP.ini 中设置的时区)。然后 modify 方法使用 strtotime() 支持的相同表达式更改日期,而 format 方法使用与 date() 相同的格式字符串格式化日期。基本上这与 pygorex1 的示例相同,但使用了面向对象的语法。

【讨论】:

请注意,这需要 PHP 5.3。 @alexn 这不是真的。从 PHP 5.2 开始可以使用 datetime 类。 PHP 5.3 中提供了一些额外的方法(我想到了 add 和 sub),但我在示例中使用的所有方法都在 PHP 5.2.x 中可用。 有趣...我真的必须开始研究 OO。我知道保持最新是必须的,但是对于我拥有的项目的类型/规模来说,OO 似乎太多/不必要了......【参考方案3】:

您可以使用工作日偏移量。在 PHP 中用于任意日期:

<?php

define('SEC_IN_DAY', (24*60*60));

$d = strtotime('2013-04-15');
// "w" is the day of the week. 0 for Sunday through 6 for Saturday
$delta_sun = -date('w', $d);
$delta_sat = $delta_sun + 6;

echo 'The day ' . date('Y-m-d H:i:s', $d) . "\n";
echo 'Last Sunday '. date('Y-m-d H:i:s', $d + $delta_sun * SEC_IN_DAY) . "\n";
echo 'Next Saturday '. date('Y-m-d H:i:s', $d + $delta_sat * SEC_IN_DAY) . "\n";

mysql 中也是这样:

SET @d := '2013-04-15';
SET @delta_sun := -DATE_FORMAT(@d, '%w');
SET @delta_sat := @delta_sun + 6;

SELECT 'The day' AS `name`, DATE(@d) AS `date`
  UNION ALL
SELECT 'Last Sunday' AS `name`, DATE_ADD(@d, INTERVAL @delta_sun DAY) AS `date`
  UNION ALL
SELECT 'Next Saturday' AS `name`, DATE_ADD(@d, INTERVAL @delta_sat DAY) AS `date`

【讨论】:

SEC_IN_DAY 常量可能有点毫无意义。 86400 在 PHP 中是一个非常常用和已知的数字,你可以直接使用它。

以上是关于PHP:如何获取过去某个特定日期的上周日..?的主要内容,如果未能解决你的问题,请参考以下文章

如何在php中获取上周的日期(星期二或其他日期)?

如何获取该周(周一至周日)之间的日期的周日期范围(周一至周日)

用php获取本周,上周,本月,上月,本季度日期的代码

如何获取帐户在两个日期之间进行的转发列表?

sql如何通过当前日期获取上周,上上周,上上上周的起始日期(周一_周七)

在 PHP 中获取上周日的日期