用PHP检查变量是否为date?

用PHP检查变量是否为date?,php,Php,我有以下字符串: 2012年8月7日04:17:18 如何使用PHP检查它是否为日期数据类型?例如,如果我检查整数,我会这样做:ifis_int$checkVar。我如何对这种日期格式执行相同的操作 date_parse($theString) 将返回以下格式的数组 Array ( [year] => 2006 [month] => 12 [day] => 12 [hour] => 10 [minute] => 0

我有以下字符串:

2012年8月7日04:17:18

如何使用PHP检查它是否为日期数据类型?例如,如果我检查整数,我会这样做:ifis_int$checkVar。我如何对这种日期格式执行相同的操作

date_parse($theString)
将返回以下格式的数组

Array
(
    [year] => 2006
    [month] => 12
    [day] => 12
    [hour] => 10
    [minute] => 0
    [second] => 0
    [fraction] => 0.5
    [warning_count] => 0
    [warnings] => Array()
    [error_count] => 0
    [errors] => Array()
    [is_localtime] => 
)
如果找不到日期,则为false。如果这足够满足你的需要,那么就用这个

将返回以下格式的数组

Array
(
    [year] => 2006
    [month] => 12
    [day] => 12
    [hour] => 10
    [minute] => 0
    [second] => 0
    [fraction] => 0.5
    [warning_count] => 0
    [warnings] => Array()
    [error_count] => 0
    [errors] => Array()
    [is_localtime] => 
)

如果找不到日期,则为false。如果这足够满足你的需要,那么就用这个

您没有真正检查变量是否为日期类型。您有一个非常特定格式的字符串,并希望确保它符合该格式

一种方法是使用正则表达式preg_匹配。获得合理正确的东西是相当简单的,但如果你也关心闰年、夏令时的跳跃,或者如果你不同意某人指定2月30日,那么可能会很困难

DateTime对象可以帮你一点忙。您可以解析日期的独立组件,将其添加到DateTime构造函数中,然后查看DateTime构造函数是否提供了与原始输入类似的内容


例如,我相当确定DateTime将手动将不存在的4月31日转换为5月1日。因此,您可以检查输入的month 4是否与month DateTime使用的month 5匹配。如果所有这些都匹配,并且没有错误,则该字符串在您的格式中是有效的。

您并不是在真正检查变量是否为日期类型。您有一个非常特定格式的字符串,并希望确保它符合该格式

if (strtotime($date) !== false)
一种方法是使用正则表达式preg_匹配。获得合理正确的东西是相当简单的,但如果你也关心闰年、夏令时的跳跃,或者如果你不同意某人指定2月30日,那么可能会很困难

DateTime对象可以帮你一点忙。您可以解析日期的独立组件,将其添加到DateTime构造函数中,然后查看DateTime构造函数是否提供了与原始输入类似的内容

例如,我相当确定DateTime将手动将不存在的4月31日转换为5月1日。因此,您可以检查输入的month 4是否与month DateTime使用的month 5匹配。如果所有这些匹配,并且没有错误,那么它就是您格式中的有效字符串

if (strtotime($date) !== false)
如果日期有效,strotime将返回数值。请注意,strotime和date_解析也适用于字符串,因此,如果您正在验证数据库,并且不需要类似

March 1st 2011
若要工作,则不能使用这些函数。对于mysql约会,我通常会这样做

$date = date('Y-m-d',strtotime($date));
将任何日期格式格式化为所需格式。如果原始$date不是日期格式,则生成的$date将为false

如果日期有效,strotime将返回数值。请注意,strotime和date_解析也适用于字符串,因此,如果您正在验证数据库,并且不需要类似

March 1st 2011
若要工作,则不能使用这些函数。对于mysql约会,我通常会这样做

$date = date('Y-m-d',strtotime($date));

将任何日期格式格式化为所需格式。如果原始$date不是日期格式,则生成的$date将为false

定义日期?你的意思是可以被解析,或者理论上是日期的某种表示形式,即使该日期的格式非常奇怪?你可以试试instanceof DateTime?@tadman通常,我所有的日期都是这种格式。因此,我希望在执行检查时得到一个带true或false的布尔值。您可以编写一个正则表达式,或者如果您非常确信它们是日期,只需将其插入解析器中,看看您是否得到了合理的结果。例如,0年或9999年的日期可能无效。这些只是您正在读取的某个文件中的字符串吗?定义日期?你的意思是可以被解析,或者理论上是日期的某种表示形式,即使该日期的格式非常奇怪?你可以试试instanceof DateTime?@tadman通常,我所有的日期都是这种格式。因此,我希望在执行检查时得到一个带true或false的布尔值。您可以编写一个正则表达式,或者如果您非常确信它们是日期,只需将其插入解析器中,看看您是否得到了合理的结果。例如,0年或9999年的日期可能是无效的。这些只是您正在阅读的某个文件中的字符串吗?为什么不存在3月31日?@Danial我在那里犯了一个错误。现在修好了!为什么不存在3月31日?@Danial我在那里犯了个错误。现在修好了!