Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.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 如何判断字符串是否表示有效的日期时间格式?_Php_Datetime - Fatal编程技术网

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;
}