Php 如何判断字符串是否表示有效的日期时间格式?
我正在处理一个对象,该对象将验证日期和时间作为更大的验证库的一部分 有些函数将日期时间格式作为其参数之一。有没有办法检查字符串是否为有效的日期时间格式 字符串不应该是日期,字符串应该是可以传递到Php 如何判断字符串是否表示有效的日期时间格式?,php,datetime,Php,Datetime,我正在处理一个对象,该对象将验证日期和时间作为更大的验证库的一部分 有些函数将日期时间格式作为其参数之一。有没有办法检查字符串是否为有效的日期时间格式 字符串不应该是日期,字符串应该是可以传递到date::format()的格式 下面是课堂: <?php namespace ArgumentValidator; use DateTime; use InvalidArgumentException; class DateTimeValidationRule implements IVa
date::format()
的格式
下面是课堂:
<?php
namespace ArgumentValidator;
use DateTime;
use InvalidArgumentException;
class DateTimeValidationRule implements IValidationRule
{
/** @var string $defaultDateTimeFormat */
private static $defaultDateTimeFormat = DATE_ATOM;
/** @var string $defaultDateFormat */
private static $defaultDateFormat = 'Y-m-d';
/** @var string $defaultTimeFormat */
private static $defaultTimeFormat = 'H:i:s';
/** @var string $dateTimeFormat */
private $dateTimeFormat;
public function __construct($dateTimeFormat = '') {
$this->dateTimeFormat = $dateTimeFormat != '' ? $dateTimeFormat : self::$defaultDateTimeFormat;
}
/** @return string */
public static function getDefaultDateTimeFormat() {
return self::$defaultDateTimeFormat;
}
/** @param string $defaultDateTimeFormat */
public static function setDefaultDateTimeFormat($defaultDateTimeFormat) {
self::$defaultDateTimeFormat = $defaultDateTimeFormat;
}
/** @return string */
public static function getDefaultDateFormat() {
return self::$defaultDateFormat;
}
/** @param string $defaultDateFormat */
public static function setDefaultDateFormat($defaultDateFormat) {
self::$defaultDateFormat = $defaultDateFormat;
}
/** @return string */
public static function getDefaultTimeFormat() {
return self::$defaultTimeFormat;
}
/** @param string $defaultTimeFormat */
public static function setDefaultTimeFormat($defaultTimeFormat) {
self::$defaultTimeFormat = $defaultTimeFormat;
}
/**
* @param string $value The value to validate
* @param bool $throwOnError Should throw an exception if it is invalid?
* @return ValidationResult
*/
public function validate($value, $throwOnError = true) {
$isValid = boolval(DateTime::createFromFormat($this->dateTimeFormat, $value));
if(!$isValid && $throwOnError) {
throw new InvalidArgumentException("Expected value to be in dateTime format: {$this->dateTimeFormat}");
}
return $isValid ? ValidationResult::makeSuccessResult() : ValidationResult::makeFailResult($this);
}
public function __toString() {
return "DateTime-{$this->dateTimeFormat}";
}
}
您可以创建一个助手方法,如:
private function isValidDateTime($string) {
return (DateTime::createFromFormat('m/d/Y', $string) !== false);
}
这将返回一个布尔结果,您可以在检查中使用。我认为验证字符串是否为有效的日期格式将是徒劳的,可能有数千个字符串将导致有效的日期时间格式。我猜你是在逃避现实
验证给定格式字符串是否生成预期日期要容易得多。我经常使用这个函数(如此之多以至于我把它变成了):-
这个函数被无耻地从中窃取。checkdate
,date\u parse
他想验证的是格式,而不是日期本身。我猜你需要在pag上找到所有有效的格式,在一个数组中,测试您的字符串是否只有该数组中的字符。您想确认'%y-%m-%d
'是php内部将接受为有效日期/时间格式字符串的内容,而不是'2016-10-12'
将根据该格式正确解析吗?这不是我所要求的。我想要一种检查日期格式是否有效的方法,而不是检查日期本身是否有效。
function validateDate($dateString, $format = 'Y-m-d H:i:s')
{
$d = \DateTime::createFromFormat($format, $dateString);
return $d && $d->format($format) == $dateString;
}