PHP:为日期添加秒数

时间:2010-12-27 12:36:26

标签: php date add duration seconds

我的$adate;包含:

Tue Jan 4 07:59:59 2011

我想在此日期添加以下内容:

$duration=674165; // in seconds

添加秒后,我需要将结果恢复为日期格式。

我不知道我在做什么,但结果很奇怪。

注意:这两个变量都是动态的。现在它们等于给定的值,但是下一个查询它们将具有不同的值。

9 个答案:

答案 0 :(得分:66)

如果你使用的是php 5.3+,你可以用一种新方法来实现它。

<?php 
$date = new DateTime();
echo $date->getTimestamp(). "<br>";
$date->add(new DateInterval('PT674165S')); // adds 674165 secs
echo $date->getTimestamp();
?>

答案 1 :(得分:24)

只需使用一些不错的PHP日期/时间函数:

$adate="Tue Jan 4 07:59:59 2011";
$duration=674165;
$dateinsec=strtotime($adate);
$newdate=$dateinsec+$duration;
echo date('D M H:i:s Y',$newdate);

答案 2 :(得分:11)

鉴于$adate是一个时间戳(如果是这种情况),你可以这样做:

$duration = 674165;
$result_date = strtotime(sprintf('+%d seconds', $duration), $adate);
echo date('Y-m-d H:i:s', $result_date);

答案 3 :(得分:2)

这样做:

$seconds = 1;
$date_now = "2016-06-02 00:00:00";

echo date("Y-m-d H:i:s", (strtotime(date($date_now)) + $seconds));

答案 4 :(得分:2)

// add 20 sec to now
$duration = 20;
echo date("Y-m-d H:i:s", strtotime("+$duration sec"));

答案 5 :(得分:0)

$current_time_zone = 150;
date("Y-m-d H:i:s",strtotime(date("Y-m-d H:i:s"))+$current_time_zone);

答案 6 :(得分:0)

我无法使用strtotime()来解决在当前时间添加动态数据/时间值的问题

这是我的解决方案:

$expires = 3600; //my dynamic time variable (static representation here)
$date = date_create(date('Y-m-d H:i:s')); //create a date/time variable (with the specified format - create your format, see (1))
echo date_format($date, 'Y-m-d H:i:s')."<br/>"; //shows the date/time variable without add seconds/time
date_add($date, date_interval_create_from_date_string($expires.' seconds')); //add dynamic quantity of seconds to data/time variable
echo date_format($date, 'Y-m-d H:i:s'); //shows the new data/time value

font:https://secure.php.net/manual/en/datetime.add.php(也参考面向对象的样式, Elzo Valugi 解决方案)

(1)https://secure.php.net/manual/en/function.date.php

答案 7 :(得分:0)

我为一个时区制作了这个例子,但如果你改变一些部分,它可能会帮助你:

$seconds_to_add = 30;
$time = new DateTime();
$time->setTimezone(new DateTimeZone('Europe/London'));
$time2 = $time->format("Y/m/d G:i:s");
$time->add(new DateInterval('PT' . $seconds_to_add . 'S'));
$timestamp = $time->format("Y/m/d G:i:s");
echo $timestamp;
echo '========';
echo $time2;

结果:

2018/06/17 3:16:23========2018/06/17 3:15:53

答案 8 :(得分:0)

当我需要进行一些计算时,我始终牢记需要什么。例如,如果我需要在日期时间增加几秒钟,那么将来的某个地方需要一个日期时间。也就是说,我需要一个名为Future的类。如何识别?需要运行什么数据?似乎应该至少有两个值:相对于我需要将来的日期的datetime,以及定义开始datetime与所需datetime之间的时间距离的时间间隔。

这是一个代码:

use Meringue\ISO8601DateTime\FromISO8601 as DateTimeFromISO8601String;

$f =
    new Future(
        new DateTimeFromISO8601String('2011-01-04T07:59:59+00'),
        new NSeconds(674165)
    );

然后您可以将其输出为ISO8601格式:

$f->value(); // returns 2011-01-12T03:16:04+00:00

如果初始日期时间不是ISO8601格式(在您的示例中就是这种情况),则应使用自定义格式创建日期时间,因此应使用类名FromCustomFormat。由于它是一个以ISO8601格式表示的日期时间,因此它扩展了一个名为ISO8601DateTime的抽象类。这是一个完整的示例:

(new Future(
    new FromCustomFormat(
        'D M j H:i:s Y',
        'Tue Jan 4 07:59:59 2011'
    ),
    new NSeconds(674165)
))
    ->value();

Here is some more关于这种方法。