PHP日期格式YYYY-MM-DD从现在开始减少或增加一周?

35
today 22-05-2011 so it should be 29-05-2011? ( plus 1 week ) 
or
today 22-05-2011 so it should be 15-05-2011? ( minus 1 week ) 

感谢您的关注。

亚当·拉马丹


假设您在第一个示例中的意思是“再加1周”。 - John Flatness
4个回答

74

使用strtotime()

echo date('d-m-Y', strtotime("+1 week")); //1 week in the future
echo date('d-m-Y', strtotime("-1 week")); //1 week ago

3
需要注意的是,这种方法非常不好,strtotime返回的是自纪元以来的秒数,您可以简单地将一周的秒数加上或减去到时间中,避免对strtotime的缓慢调用。 $date = date('d-m-Y', time() + 604800); - HostFission
@hexYeah确实是这样。time()返回一个Unix时间戳,它表示自1970年1月1日12:00:00 AM UTC(其中“U”代表“通用协调时”)以来的秒数。然后由您来应用任何时区偏移量,包括考虑夏令时。如果这对您不起作用,请确保您已正确设置时区。date应用本地系统时区,如果您希望使用UTC,则需要使用gmdate。如果您正在使用已应用时区偏移量的Unix时间戳,则它们不是Unix时间戳。 - Geoffrey
@Geoffrey,我指的不是答案,而是下面的评论。我觉得有必要强调一下,因为它有一个+1,我不希望人们认为这是一个有效的解决方案。如果我们将在接下来的一周内更改时间,则“+ 604800”无法覆盖甚至闰年。 - hexYeah
@hexYeah 我也是在指评论。你的说法完全不正确,UTC Unix 时间戳才是标准。夏令时因地区而异,甚至实施时间也不同。我生活在一个有夏令时的时区,也必须处理这个问题。Unix 时间戳是一个干净、未被篡改的科学标准。请参见 https://dev59.com/ImEi5IYBdhLWcg3wJZVe 以了解如何正确地将 Unix 时间戳转换为日期,并考虑闰年。您还可以查看 glibc 中的源代码,了解时区是如何处理的。 - Geoffrey
抱歉浪费了大家的时间,我确信不久前遇到过这个问题。可能不是我记得的那样... 我还会去查一下 :P 但你说得对... - hexYeah
显示剩余3条评论

32
你可以使用DateTime类来进行日历计算。例如,要增加一周,你可以使用以下代码:
$date = new DateTime('22-05-2011');
$date->modify('+1 week');

或者 $date->add(new DateInterval('P1W')); - Hatzegopteryx
1
一行代码:$date = (new DateTime('22-05-2011'))->modify('+1 week'); - totymedli

17

strtotime 可以处理此问题。

$pDate = strtotime('22-05-2011 + 1 week');
echo date('d-m-Y',$pDate);

补充说明:如果你想从特定日期开始计算,可以按照以下步骤操作。如果你只是想获取“今天”加减一周的时间段,那么请将JohnP的答案标记为正确答案。:)


0

如果您不想硬编码今天的日期,可以使用 PHP 的 Carbon 类方法。

Carbon::now()->subWeek(1);
Carbon::now()->addWeek(1);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接