2017-10-08 104 views
1

我有时间字符串如下如何检查是否时间串(无日期部分)是在H:I:s格式PHP

8:7:9

17点34分38秒

我想检查字符串是否具有H:i:s格式,如果我发现完全无效的字符串,如空,其他文本值,带日期部分的字符串(2017:10:12 18:39:21)

Thanks in提前..!

+0

我会把它在'\ DateTime的构造函数()'例如'new \ DateTime(“2017-10-08 8:7:9”)'会成功创建DateTime的实例,也是17:34:38,但'\ DateTime(“2017-10-08 25:70:9“)'或'\ DateTime(”2017-10-08 string“)'将失败。您可以手动执行的一件事是不将空字符串添加到构造函数中,因为它创建的有效日期时间为00:00:00时间。 –

+0

我可以使用date(“H:i:s”,strtotime($ value))来获得有效的时间,但是当我有一个字符串'kkkdls'时,它会给出一个时区时间,我猜...将需要去prematmatch –

回答

0

使用DateTime检查字符串是否与特定的时间格式相匹配:

if (!DateTime::createFromFormat('H:i:s', '2017-10-08 17:23:30')) { 
    // time string does not match the H:i:s format 
} 

如果字符串所提供的格式相匹配,其结果将是一个DateTime对象。如果没有,结果将是一个布尔值false。所以你可以很容易地检查。

+0

[不会工作](https://3v4l.org/cCW86)8:7:9。 – ishegg

+0

嘿@ishegg检查我的答案,如果你需要知道一个 –

+0

@ishegg是正确的,因为这不是一个有效的'H :i:s'格式化的时间字符串'H:i:s'需要几小时,几分钟和几秒钟的前导零, – rickdenhaan

0

我先用正则表达式匹配就如下面

if(preg_match("/\d{1,2}\:\d{1,2}\:\d{1,2}/",$value)) 
{ 
} 

随后施加的分裂和验证各个部分时间为24,60和60

相关问题