所以,PHP显然感觉就像今天的白痴。或者也许是我。或两者兼而有之。
function before($test,$bar) {
$test = date_create($test);
$bar = date_create($bar);
$diff = date_diff($bar,$test);
$diff = $diff->format('%r%a') * 1;
return $diff<0;
}
它拒绝接受以下方式生成的日期:
date('m-d-Y', strtotime($date));
......不过是一个布尔人!如果我输出结果,它会以字符串形式出现,但是 - 由于PHP让我感到困惑 - before()
将它视为不是它的东西。这里没有任何东西可以将它转换为布尔值。我可以直接给它一个字符串,它工作正常。从一段专门为此目的而制作的代码中给出一个日期,好吧,我们不能有这个原因......
Warning: date_diff() expects parameter ... to be DateTime, boolean given
我想,“很好,我会给你解析器的愿望。”
function before($test,$bar) {
$test = new DateTime(date('Y-m-d',strtotime($test)));
$bar = new DateTime(date('Y-m-d',strtotime($bar)));
$diff = $bar->diff($test);
$diff = $diff->format('%r%a') * 1;
return $diff<0;
}
结果没有任何变化。我给了它想要的东西,或者至少它想要的所说的(我想),它仍然拒绝我。编码模仿现实。
我对约会感到非常不舒服。关于PHP如何处理一年中的时间,我也不是很舒服。有什么建议?也许如何让它工作呢?
正在运行var_dump($test)
object(DateTime)#7 (3) {
["date"]=>
string(19) "1970-01-01 00:00:00"
["timezone_type"]=>
int(3)
["timezone"]=>
string(13) "Europe/Berlin"
}
答案 0 :(得分:1)
正如手册中所述,date_create()是DateTime::__construct()的别名。我们可以阅读:
返回值
返回新的DateTime实例。程序样式在失败时返回FALSE。
所以很明显布尔来自何处。
现在,您的代码显示了从Unix时间戳到字符串和反之的许多转换,但不是从您开始的值,因此无法指出问题的确切来源。但我会说你对日期处理中涉及的数据类型有一定的困惑。这是一个小小的总结:
Unix时间戳:它是一个整数,计算自Unix Epoch(1970年1月)以来的秒数。它是传统日期函数处理的值,它接收一个整数作为参数或返回一个。
DateTime:这是PHP / 5.2中引入的新的面向对象日期功能。
字符串:它不是标准格式本身,因此它只能用于显示目的或作为中间格式(例如,将日期插入数据库)。
可悲的是,DateTime构造函数只接受字符串,甚至不允许告诉确切的格式(恕我直言,一个没有深思熟虑的设计决定)。为了减少潜在的歧义(11月10日或10月11日10/11/2011
),我建议您使用"YYYY-MM-DD"
格式。
提示:决定是使用时间戳还是DateTime对象并坚持使用。它会让你的生活更轻松。
答案 1 :(得分:1)
我知道这可能会过时,但我认为以下内容可能对您有所帮助,它帮助了我......
$interval = date_diff(date_create($strStartDate), date_create($strEndDate));
echo $interval->format('%R%a days');
哪里
$strStartDate = your starting date
$strEndDate = your ending date
$interval
将返回差异,下面的格式声明将根据差异插入+
或-
。
我希望这有助于你
此致
Husnain
答案 2 :(得分:0)
使用var_dump()
检查您的类型。看看这说:
var_dump(strtotime($bar));
答案 3 :(得分:0)
您应该在设置之前和之后var_dump($test, $bar)
查看您是否确实有日期。我会假设日期已创建,因为您没有提及$bar->diff($test)
抛出任何“非对象”错误的任何内容。假设您所讨论的布尔值是调用before()
的结果,那么当您执行返回布尔值的操作时,这是预期的。
答案 4 :(得分:0)
new DateTime($var);
在无法理解输入时返回false
。
尝试var_dump
所有变量,这也会列出类型(data / string / boolean)