Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP添加时间问题_Php_Date_Add - Fatal编程技术网

PHP添加时间问题

PHP添加时间问题,php,date,add,Php,Date,Add,我试图将时间添加到某个特定文本文件(其中$filename表示为textfile)的上次修改时间,本质上是这样的 $txt_time = date("Y-m-d H:i", filemtime($filename)); $add_time = $txt_time + [5minutes]; 我试过这个 $add_time = date_add($txt_time, new DateInterval("T5M")); 但这似乎不起作用 有什么想法吗?我想你可以在date()函数中添加分钟数 $

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

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

$add_time = date_add($txt_time, new DateInterval("T5M"));
但这似乎不起作用
有什么想法吗?

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

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

如PHP手册中所述,将a作为其第一个参数,但返回一个
字符串
,因此不,您编写的代码将无法工作

相反,您需要与
'U'
格式说明符一起使用,从的返回值创建一个对象,该值是一个整数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\u time
变量将由
date\u 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');
注意:您在创建
日期间隔时提供的格式也稍有错误,它应该总是以
p
开头,因此应该是
“PT5M”
。我已经更新了上面的例子


在这里,我检查了代码的第一个版本是否正确运行。

@IMSoP我无法让您的建议正常工作,而您的实时演示正常工作,当我将其与实际的filemtime($filename)一起使用时,我无法使其正常工作

@Fabio您的建议让我走上了正确的道路,“+5分钟”似乎有效,但当我使用strotime()时,我却无法让它以这种方式工作:

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

谢谢大家的帮助

$add_time=$txt_time+[5分钟]我相信这应该会起作用<代码>返回日期(“d”,filemtime($file_to_read)
你试过这样做吗?如果在谷歌的搜索输入中输入“添加5分钟到时间php”@Allendar,我没有接受过这方面的正式培训,那么OOP是什么意思?面向对象编程?如果是,那么“使用OOP”是什么意思对不起,我不明白this@Fred-ii-当然,我首先尝试了谷歌,大多数结果解释了如何将时间添加到当前时间,我的问题是如何将时间添加到修改后的文件时间(当我使用我在谷歌上找到的添加时间的传统方法时,这似乎不起作用)他们真的应该为PHP制作一个alt文档,其中删除了所有的过程性内容:P+1tho@Allendar这对于90%没有直接OO等价物的核心函数来说是非常无用的
返回一个普通整数,包括这种情况。
date\u add
作为一个显式处理对象的过程函数的存在似乎是不必要的。更重要的是,尽管它看起来似乎可行,但这个解决方案实际上不起作用:
filemtime()
以整数形式返回Unix时间戳,因此您最终会向
strotime
传递一个字符串,如
'1234567890+5分钟'
,这不会做任何非常有用的事情:您可以通过使用对
日期()的额外调用来修改此方法
,虽然它有点难看,特别是如果你把它放在一行上:区间规范
T5M
不存在,也不会起作用。它应该是
PT5M
@Glavić,我自己刚刚发现了它;我没有测试就从问题中复制了它,并准备添加一条注释:)