向datetime添加可变字符串,例如。 2周

问题描述:

是否可以在PHP中为日期时间添加一个像“2天,2周甚至4小时”这样的可变字符串。向datetime添加可变字符串,例如。 2周

例如:

我有一个日期时间是这样的:“2017年8月2日12:00” 现在用户选择如“4小时或2周” 现在用户选择的时间间隔应被添加到日期时间。

这可能吗?

我不想整个代码,也许只是一个建议如何做到这一点。

感谢

+0

您应该检查[strtotime](http://php.net/manual/en/function.strtotime.php) –

+0

您可以将用户输入格式化为[* interval spec *](http:// php。 net/manual/dateinterval.construct.php#refsect1-dateinterval.construct-parameters),例如'P2WT4H'并在'DateTime#add'中使用它 – Phil

+0

用户选择是如何控制的?它只是*文本还是有特定的字段? – Phil

是,使用

$userDate = strtotime('2017-08-02 12:00:00'); 

echo date('Y-m-d H:i:s', strtotime('+4 hours', $userDate)); 

4小时后获取日期

Example


说明

strtotime转换任何英文文本的日期时间描述为Unix时间戳。最常用的是它与实际的日期字符串或不同的字符串一起使用。例如。 +5 months,'下周一'等。它将返回Unix timestamp - 表示1970-01-01之后有多少秒的整数(1970-01-01 00:00:00为0,1970-01-01 00:01:00为60等等) 。

所以在strtotime('2017-08-02 12:00:00')我们将日期转换为整数供以后使用。

strtotime('+4 hours', $userDate) - 此处我们使用我们的日期作为“now”参数(默认为time())并要求在4小时后返回时间戳。

echo date('Y-m-d H:i:s', ...); - date接受格式和Unix时间戳从整数转换回人类可读的文本。

+1

这个工程!非常感谢你。但我想了解它不只是复制和粘贴。所以我会读一读。 – Reebal

+0

@Reebal我已经添加了一些关于答案的解释 – Justinas

+0

谢谢,我很感激。是否有可能像这样使用它:'strtotime($ hours,$ userData);'? – Reebal

可能是你正在寻找这样的: http://php.net/manual/en/datetime.modify.php

$date = new DateTime('2006-12-12'); 
$date->modify('+1 day'); 
echo $date->format('Y-m-d'); 

对于日期时间,您可以使用add方法,但必须输入正确的代码才能添加数量。

$my_date = new DateTime(); 

$addition = 4; 

$my_new_date = $my_date->add(new DateInterval("P${addition}D")); 

echo $my_new_date->format('Y-m-d H:i:s'); 

其中添加是您想要添加的变量。