PHP添加时间问题


PHP add time issue

我试图将时间添加到特定文本文件(其中$filename表示textfile)的最后修改时间,本质上是这个

$txt_time = date("Y-m-d H:i", filemtime($filename));
$add_time = $txt_time + [5minutes];

i've try this

$add_time = date_add($txt_time, new DateInterval("T5M"));

但这似乎不起作用什么好主意吗?

我想你可以在date()函数中添加分钟数

$txt_time = date("Y-m-d H:i", strtotime(filemtime($filename).'+ 5 minutes'));

正如PHP手册中所记录的那样,date_add()将DateTime对象作为其第一个参数,但date()返回string,所以不,您编写的代码将不起作用。

相反,您需要使用date_create_from_format()'U'格式说明符来从filemtime()的返回值创建一个对象,这是一个整数Unix时间戳。

$txt_time = date_create_from_format('U', filemtime($filename));
date_add($txt_time, new DateInterval("PT5M"));
echo date_format($txt_time, 'Y-m-d H:i:s');

但小心!$txt_time变量将被date_add操作修改

您还可以使用相同代码的OOP版本,这使得发生就地修改的原因更清楚一些:

$txt_time = DateTime::create_from_format('U', filemtime($filename));
$txt_time->add(new DateInterval("PT5M"));
echo $txt_time->format('Y-m-d H:i:s');

如果您使用的是PHP 5.5,您可以创建一个DateTimeImmutable对象,它将返回您原先计划的新值,而不改变原来的变量:

$txt_time = DateTimeImmutable::create_from_format('U', filemtime($filename));
$add_time = $txt_time->add(new DateInterval("PT5M"));
echo $add_time->format('Y-m-d H:i:s');

注意:您还提供了稍微错误的格式来创建DateInterval,它应该始终以P开头,所以应该是"PT5M"。我已经更新了上面的例子。

下面是一个现场演示,我检查了第一个版本的代码是否正确运行。

@IMSoP我不能让你的建议工作,而你的现场演示工作,我不能让它工作,当我使用它与实际的文件时间($filename)

@Fabio你的建议让我在正确的轨道上,"+5分钟"似乎工作,但不是当我使用strtotime()代替我能够让它以这种方式工作:

$add_time = date("Y-m-d H:i:s", filemtime($filename) + "300 seconds");

谢谢大家的帮助!