我想要一个逻辑,如果$ due等于没有日期,那么我希望数据从2000开始。我的代码不起作用。
if($due == '0000-00-00 00:00:00'){
$due = strtotime('2000-00-00 00:00:00');
}
答案 0 :(得分:30)
如果你在$ due中存储strtotime(),那么你也需要比较它
if($due == strtotime('0000-00-00 00:00:00')){
$due = strtotime('2000-00-00 00:00:00');
}
或者更简单地说
if($due == 0){
$due = strtotime('2000-00-00 00:00:00');
}
但是如果$ due来自你的db作为一个字符串,你会想要strtotime()它:
$due = strtotime($due);
if($due == 0){
$due = strtotime('2000-00-00 00:00:00');
}
但要注意时区。也就是说,strtotime('0000-00-0000:00:00 UTC')!= strtotime('0000-00-0000,00:00 EST')。这也可能会打破你的比较。
答案 1 :(得分:1)
您需要确保以相同的格式比较值。根据您目前的情况,将会发生以下三件事:
$due
是int
,则您将其与0000-00-00 00:00:00
进行比较的字符串将转换为int
,这将导致0
,并将$due
与0
进行比较。这只会导致匹配$due === 0
。$due
是bool
,则该字符串将转换为bool
,这将产生TRUE
,并且只有$due === TRUE
才能获得匹配1}}。$due
是任何其他类型,它将被转换为字符串,并将两者作为字符串进行比较。只有$due === '0000-00-00 00:00:00'
。如果说你可能需要将这些值作为整数进行比较。这意味着您需要通过strtotime()
传递任何字符串 - 包括$due
,如果它是字符串。由于您未显示$due
的示例值,因此无法提供准确的工作代码。
答案 2 :(得分:1)
我知道这是一个老问题,但这个答案可能会对某人有所帮助
strtotime返回成功时间戳,否则返回FALSE。
$test = strtotime($due);
$due = (!$test || $test < 0) ? '2000-00-00 00:00:00' : $due;
unset($test);
问候。
答案 3 :(得分:1)
我不知道为什么strtotime对我不起作用。可能是因为时区和其他东西。
一如既往,花哨的正则表达式就像魅力一样。我不知何故沉迷于它!
if(preg_match("/0{4}/" , $dbDateField))
{
// no its not acceptable
}
else
{
//ok
}
答案 4 :(得分:0)
strtotime(YourDate) != NULL
也可以。
我正在处理数据库的DOB和DOM(婚姻日期)部分。似乎NULL默认保存日期为0000-00-00。说实话,这是一种愚蠢的事情。
或许将我的字段设为DATE字段而不是将其设为VARCHAR并在那里保存STRTOTIME值是我的愚蠢。
<?php
if(strtotime($dates->dom) != NULL)
{
echo '<a href="' . base_url() . 'dates/dom/' . $dates->dom . '">' . date('j F, Y',strtotime($dates->dom)) . '</a>';
}
else
{
print 'Not Listed Yet';
} ?></strong>
答案 5 :(得分:0)
我想建议最简单的表格
if(!$due)
$due = strtotime('2000-00-00 00:00:00');
答案 6 :(得分:0)
以下是检查数据库中的datetime字段( mysql )是否为空或'0000-00-00 00:00:00'
使用starttime选择all为null或'0000-00-00 00:00:00'且endtime不是(null或'0000-00-00 00:00:00')
在数据库结束
select * from table where IFNULL(MONTH(starttime),0) >= 1 and IFNULL(MONTH(endtime),0) < 1;
在 php 结束
if((int)$starttime && !(int)$endtime){ /// }