我正在从数据库中检索具有与之关联的日期的条目。
我希望能够获得上一个星期日和下一个星期六相对于该特定日期来填充jQuery日期选择器。
我知道如何使用实际时间/日期来实现:
strtotime('last Sunday')
但我不知道如何为现在以外的日期做这件事......
感谢。
答案 0 :(得分:45)
使用strtotime
的第二个参数指定计算“上周日”的日期以及其他相对日期:
strtotime('last Sunday', strtotime('09/01/2010'));
示例:
echo date('m/d/Y', strtotime('last Sunday', strtotime('09/01/2010')));
输出:
08/29/2010
答案 1 :(得分:17)
您也可以使用datetime类来执行此操作。下面的代码可以工作:
$date = new DateTime('09/01/2010'); $date->modify('last Sunday'); echo $date->format('d/m/Y');
Output: 29/08/2010
看看http://ca2.php.net/manual/en/class.datetime.php。构造函数接受两个可选参数,第一个是对象的日期字符串(默认为now),第二个是DateTimeZone对象(默认为PHP.ini中设置的时区)。然后,modify方法使用strtotime()支持的相同表达式更改日期,格式方法使用与date()相同的格式字符串格式化日期。基本上这与pygorex1的示例相同,但使用面向对象的语法。
答案 2 :(得分:0)
您可以使用工作日偏移量。在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`