向时间戳添加天数

php
2022-08-30 19:33:57

给出一个开始日期,我添加四次七天,以获得5个不同的日期,每个日期正好分开一周。

//$date = '28-10-2010';
$timestamp = mktime( 0, 0, 0, 10, 01, 2010 );
echo "Date=".date( 'd-m-Y', $timestamp )."<br>";

$timestamp += (60*60*24*7);
echo "Date=".date( 'd-m-Y', $timestamp )."<br>";

$timestamp += (60*60*24*7);
echo "Date=".date( 'd-m-Y', $timestamp )."<br>";

$timestamp += (60*60*24*7);
echo "Date=".date( 'd-m-Y', $timestamp )."<br>";

$timestamp += (60*60*24*7);
echo "Date=".date( 'd-m-Y', $timestamp )."<br>";

代码输出如下:

Date=01-10-2010 Friday
Date=08-10-2010 Friday
Date=15-10-2010 Friday
Date=22-10-2010 Friday
Date=29-10-2010 Friday

只要我知道这是正确的。但是,看看在通过2010-10-31和2010-11-01时会发生什么

$timestamp = mktime( 0, 0, 0, 10, 28, 2010 );[...]

奇怪的是,它输出了这个:

Date=28-10-2010 Thursday
Date=03-11-2010 Wednesday
Date=10-11-2010 Wednesday
Date=17-11-2010 Wednesday
Date=24-11-2010 Wednesday

发生了什么事情?第二次约会应该是04-11-2010!另外,我看到这种“失败”每十年发生一次!这与夏令时有关吗?如果是这样,我该如何解决?有什么是我忽略的吗?

编辑:好吧,我输出了时间,只是为了看看会发生什么,这就是我现在得到的:

Date=28-10-2010 Thursday :: 00:00:00
Date=03-11-2010 Wednesday :: 23:00:00
Date=10-11-2010 Wednesday :: 23:00:00
Date=17-11-2010 Wednesday :: 23:00:00
Date=24-11-2010 Wednesday :: 23:00:00

似乎与时间有关,2010-11-31发生了一些事情...


答案 1

切勿使用 60*60*24*7 等数学来加/减天(由于夏令时),使用或改用:strtotimemktime

$timestamp = strtotime('+7 days', $timestamp);

// Or something like this (it's OK to have day parameter <= 0 or > 31)
$timestamp = mktime(0, 0, 0, $month, $day + 7, $year);

如果您也输出时间,您的示例将更加明显:

$timestamp = mktime(0, 0, 0, 10, 28, 2010);
echo date('Y-m-d H:i:s', $timestamp) . "\n";

$timestamp += 60*60*24*7;
echo date('Y-m-d H:i:s', $timestamp) . "\n";

输出:

2010-10-28 00:00:00
2010-11-03 23:00:00

在这里,你有而不是因为其中一天(10月31日)是25小时而不是24小时。2010-11-03 23:00:002010-11-04 00:00:00


答案 2

如果有人需要这个,就像我引用网站一样:今天,当前时间,Y-m-d H:i:s,加上+7天。或者你可以添加+3个月,等等。

$timestamp=strtotime("+7 Days");
$nowtime =  date('Y-m-d H:i:s', $timestamp);

推荐