我试图将时间添加到特定文本文件(其中$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");
谢谢大家的帮助!