当前位置: 首页 > 知识库问答 >
问题:

正确确定日期字符串是否为该格式的有效日期

缪成天
2023-03-14

我从API接收一个日期字符串,它的格式为yyyy-mm-dd

我目前正在使用正则表达式来验证字符串格式,它工作正常,但是我可以看到一些情况,根据字符串,它可能是正确的格式,但实际上是无效的日期。

在PHP中有没有更好的方法来获取字符串,例如2013-13-01,并判断它是否是格式yyy-mm-dd的有效日期?

共有3个答案

巩选
2023-03-14

以简单的方式使用php预构建函数:

function checkmydate($date) {
  $tempDate = explode('-', $date);
  // checkdate(month, day, year)
  return checkdate($tempDate[1], $tempDate[2], $tempDate[0]);
}

测验

   checkmydate('2015-12-01'); //true
   checkmydate('2015-14-04'); //false
黄聪
2023-03-14

确定任何字符串是否为日期

function checkIsAValidDate($myDateString){
    return (bool)strtotime($myDateString);
}
羊柏
2023-03-14

为此,您可以使用DateTime::createFromFormat()

php prettyprint-override">function validateDate($date, $format = 'Y-m-d')
{
    $d = DateTime::createFromFormat($format, $date);
    // The Y ( 4 digits year ) returns TRUE for any integer with any number of digits so changing the comparison from == to === fixes the issue.
    return $d && $d->format($format) === $date;
}

[函数取自此答案。也是在php.net上。最初由Glavić编写。]

测试用例:

var_dump(validateDate('2013-13-01'));  // false
var_dump(validateDate('20132-13-01')); // false
var_dump(validateDate('2013-11-32'));  // false
var_dump(validateDate('2012-2-25'));   // false
var_dump(validateDate('2013-12-01'));  // true
var_dump(validateDate('1970-12-01'));  // true
var_dump(validateDate('2012-02-29'));  // true
var_dump(validateDate('2012', 'Y'));   // true
var_dump(validateDate('12012', 'Y'));  // false

演示!

 类似资料:
  • 问题内容: 我从API收到日期字符串,其格式为。 我目前正在使用正则表达式来验证字符串格式,这种方法可以正常工作,但是我可以看到某些情况,根据字符串,它可能是正确的格式,但实际上是无效的日期。即,例如。 PHP中是否有更好的方法来接收诸如这样的字符串,并确定该日期是否为该格式的有效日期? 问题答案: 您可以为此目的使用类: 测试用例:

  • 问题内容: 在这种情况下,我正在读取大约13万条记录,其中包含存储为String字段的日期。一些记录包含空格(空),一些包含这样的字符串:“ dd-MMM- yy”,而另一些包含此“ dd / MM / yyyy”。 我写了这样的方法: 因此,您可能已经发现了问题。 我正在使用try .. catch作为我逻辑的一部分 。最好事先确定String实际上包含某种格式的可解析日期,然后再尝试解析它。

  • 我有一个变量,它包含以下值: 我目前正在使用以下代码将其格式化为字符串:.使用此代码,我得到以下值: 我需要这个更准确。我想要得到的精确值在以下精度范围内: 我在以下链接上做了一些研究:http://www.w3.org/TR/NOTE-datetime 以下是我的发现: 此配置文件没有指定可以使用多少位数来表示每秒的小数部分。允许分数秒的采用标准必须规定最小位数(大于或等于一的数字)和最大位数(

  • 问题内容: 我已经看到JSON日期格式的许多不同标准: 哪一个是正确的?还是最好的?有什么标准吗? 问题答案: JSON本身 没有 指定日期应如何表示,但JavaScript却指定了。 您 应该 使用的方法发出的格式: 原因如下: 它是人类可读的,但也很简洁 排序正确 它包括小数秒,可以帮助重新建立时间顺序 符合ISO 8601 ISO 8601已经在国际上建立了十多年的历史 W3C,RFC333

  • 问题内容: 我正在学习Go,并且正在尝试对日期时间进行JSON解组。 我有一个用C语言编写的程序生成的JSON,我正在输出我认为有效的ISO8601 / RFC3339时区偏移量。我正在使用以下格式字符串: (请注意,本机不支持,我有一个包装器将其替换为纳秒级)。 然后,将产生以下结果: 但是在Go中取消编组此功能将无效:https : //play.golang.org/p/vzOXbzAwdW

  • 我见过很多不同的JSON日期格式标准: 哪一个是正确的?还是最好?这方面有什么标准吗?