Php 将特定格式的日期转换为unix,然后比较
我在PHP中比较两个日期时遇到问题。我想将当前日期与用户输入的日期进行比较Php 将特定格式的日期转换为unix,然后比较,php,date,Php,Date,我在PHP中比较两个日期时遇到问题。我想将当前日期与用户输入的日期进行比较 $date = "18/05/2018"; 用户输入的日期 $date_unix = strtotime($date); 用于将日期从给定格式转换为时间,以便进行比较 if($date_unix < time()){ echo '<b>Notice:</b> You cannot specify a date in the past.<br>'; }
$date = "18/05/2018";
用户输入的日期
$date_unix = strtotime($date);
用于将日期从给定格式转换为时间,以便进行比较
if($date_unix < time()){
echo '<b>Notice:</b> You cannot specify a date in the past.<br>';
}
上面的if语句总是运行的,我不知道为什么。任何帮助都将不胜感激。来自:
通过查看各个组件之间的分隔符,可以消除m/d/y或d-m-y格式的日期歧义:如果分隔符是斜杠/,则假定为美式m/d/y
由于2018年5月18日不是美国格式的有效日期,其中第一个数字表示月份,您的STROTIME呼叫将返回false。假零总是小于时间
如果您对输入的格式有信心,最简单的修复方法是在转换为时间戳之前用破折号替换斜杠。然后,STROTIME将字符串解释为国际日期,该日期将正常工作:
$date = str_replace('/', '-', "18/05/2018");
$date_unix = strtotime($date);
但是,更新代码以使用DateTime类(如smith或LSerni的回答中所述)可能会给您带来更大的灵活性。要解决此问题,请使用上面提供的信息,我使用explode将$date变量拆分为一个数组,然后重新排列生成的数组。然后,我将分解后的变量拼凑在一起,形成正确的美国日期格式 以下是与上述描述相关的代码:
$splitdate = (explode("/",$date));
$splitdate_day = $splitdate[0];
$splitdate_month = $splitdate[1];
$splitdate_year = $splitdate[2];
$date_change = $splitdate_month . "/" . $splitdate_day . "/" . $splitdate_year;
if(strtotime($date_change) < time()){
echo '<b>Notice:</b> You cannot specify a date in the past.<br>';
}
这可能不是最有效的方法,但它解决了我遇到的问题。应该停止使用遗留strotime,开始使用DateTime类
$date = "18/05/2018";
$newDate = DateTime::createFromFormat('d/m/Y', $date);
if (new DateTime() < $newDate) {
echo 'future';
}else{
echo 'past';
}
strotime对日期格式进行假设,在这种情况下,这些假设是错误的
您使用的是像我一样的日/月/年格式:这是意大利的默认格式。昨天,Strotime将2018年5月12日定为2018年12月5日。这项测试本可以通过,而且显然是正确的
如果是预订的话,七个月的费用就会产生-D
所以一定要指定格式。为此,我觉得最好的方法是使用DateTime:
出于同样的原因
此外,要警惕夏令时。$date=[18/05/2018];这是一个数组!抱歉,这是我的语法错误-将立即编辑。它不是实际程序中的数组,只是错误地输入到stackoverflow中。您是否尝试过转储此值$date_unix?是的,此值可以使用echo输出,只显示:2018年5月18日m/d/y或d-m-y格式的日期通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜杠/,然后假设为美国m/d/y,即使在“梅里凯”中也没有第18个月,我们添加了一些额外的细节。然而,我最初的答案确实回答了一个问题,即为什么这种比较不起作用?
$date = date_create_from_format('d/m/Y', '18/05/2018');