Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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 在Date中使用一个简单的字符串_Php_Regex_Datetime - Fatal编程技术网

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