Php 在Date中使用一个简单的字符串
我自己也有这样一根绳子Php 在Date中使用一个简单的字符串,php,regex,datetime,Php,Regex,Datetime,我自己也有这样一根绳子 citation 2d6h8y4m d - days min - min h - h y - years m - months s - seconds 我想将今天的日期添加为节省的时间,即 2 days , 6 hours, 8 years and 4 months 我知道如何用一种简单的方式来做——在所有文本上循环并按顺序读取数字,但我猜它可以做得更简单——一个正则表达式。对不起,如果有人给了我这样一个函数,或者给了我足够的线索(例如,给一个角色的模式),我可以讲述
citation
2d6h8y4m
d - days
min - min
h - h
y - years
m - months
s - seconds
我想将今天的日期添加为节省的时间,即
2 days , 6 hours, 8 years and 4 months
我知道如何用一种简单的方式来做——在所有文本上循环并按顺序读取数字,但我猜它可以做得更简单——一个正则表达式。对不起,如果有人给了我这样一个函数,或者给了我足够的线索(例如,给一个角色的模式),我可以讲述故事
@信息
不懂还开车不想做今天的日期加如2天,4个月等 Ie今天是2014-11-22下午5:43:45。 加上我2天6小时8年4个月后
2022-04-24 11:43:45 p.m.通过
preg\u match\u all()分离int
值和char/word
。创建并array()
,该数组包含字符的全部含义(即h=hours)。然后只需foreach()
。例如:
$avr = array('d'=>'days', 'min'=>'min','h'=>'hours', 'y'=>'years', 'm'=>'months', 's'=>'seconds');
$str = '2d6h8y4m';
preg_match_all('/\d+/', $str, $int);
preg_match_all('/[a-z]+/', $str, $word);
$len = count($int[0]) - 1;
$result = '';
foreach($int[0] as $k=>$v){
if($len == $k){
$result .= ' and ' . $v . ' ' . $avr[$word[0][$k]];
}else{
$suf = ($k == 0) ? '' : ', ';
$result .= $suf . $v . ' ' . $avr[$word[0][$k]];
}
}
echo $result;
输出:
2 days, 6 hours, 8 years and 4 months
你要找的正则表达式是
(\d+)d(\d+)h(\d+)y(\d+)m
\d
匹配任何数字。从中可以提取括号之间的匹配内容。以下是完整的代码:
preg_match("(\d+)d(\d+)h(\d+)y(\d+)m", "2d6h8y4m", $matches);
现在,$matches
将是一个数组,其中包含括号之间匹配的内容$matches[0]
将是第一个括号(日期),$matches[1]
将是第一个括号(小时),等等。你为什么要重新发明轮子
为什么不将间隔存储在中,例如:P8Y5M2DT6H
$date = new DateTime();
$interval = new DateInterval('P8Y5M2DT6H');
$date->add($interval);
不理解仍然驾驶不想做今天的日期添加,例如2天,4个月等。即今天是2014-11-22 5:43:45下午。在添加了2天6小时8年零4个月后,我有2022-04-24 11:43:45下午。不理解仍然驾驶不想做今天的日期添加,例如2天,4个月,例如,今天是2014-11-22 5:43:45,加上我2天6小时8年零4个月后,我有2022-04-24 11:43:45