【问题标题】:How to check if time string(without date part) is in H:i:s format php如何检查时间字符串(不带日期部分)是否为 H:i:s 格式 php
【发布时间】:2017-10-08 12:23:35
【问题描述】:

我有如下时间字符串

8:7:9

17:34:38

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

在此先感谢..!

【问题讨论】:

  • 我会将它放在 \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 时间创建有效的 DateTime。
  • 我可以使用 date("H:i:s", strtotime($value) this. 获取有效时间。但是当我有一个字符串 'kkkdls' 时,我猜它会给出一个时区时间。需要参加预赛

标签: php datetime formatting timestamp


【解决方案1】:

使用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。因此,您可以轻松检查。

【讨论】:

  • 嘿@ishegg 如果您需要了解,请查看我的答案
  • @ishegg 正确,因为这不是有效的H:i:s 格式化时间字符串。 H:i:s 要求小时、分钟和秒前导零。
  • 对,我就是这个意思。这是 OP 的第一个示例,因此它需要为此工作。
  • @ishegg OP 的问题是“我想检查字符串是否具有 H:i:s 格式”,而第一个字符串没有(它不是 any 中的有效时间字符串i> 本机支持的时间格式)。 OP 自己的答案将适用于这种情况。
  • @rickdenhaan 是的,同意。他的要求和他的例子不匹配。
【解决方案2】:

我首先使用如下正则表达式匹配

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

然后应用拆分并验证 24、60 和 60 的各个时间部分

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 2023-03-29
    • 1970-01-01
    • 2021-03-14
    相关资源
    最近更新 更多