[英]PHP date comparison to find birthdays that are before timestamp date 1970?
I have created function to generate list of members having birthday 1 week before, today and week after. 我创建了一个功能来生成1周前,今天和后一周生日的成员列表。 The function is
功能是
$m= date("m"); // Month value
$de= date("d"); //today's date
$y= date("Y"); // Year value
for($i=0;$i<count($members);$i++){
$m_bday = strtotime($members[$i]->dob);
$bday_date = date('d',$m_bday);
$bday_month = date('m',$m_bday);
$bday = strtotime(date('Y-m-d',mktime(0,0,0,$bday_month,$bday_date,$y)));
//echo $bday_date."</br>".$bday_month."</br>".$members[$i]->dob."</br>".date('Y-m-d',$bday);exit;
$week_before = strtotime(date('Y-m-d', mktime(0,0,0,$m,($de-7),$y)));
$week_after = strtotime(date('Y-m-d', mktime(0,0,0,$m,($de+7),$y)));
if(date('d-m') == date('d-m',$bday)){
$this->present_bday[] = array('mem_name'=> $members[$i]->name);
}
else if(date('d-m',$week_before) <= date('d-m',$bday) && date('d-m',$bday) < date('d-m')){
$this->past_bday[] = array('mem_name' => $members[$i]->name);
}
else if(date('d-m')< date('d-m',$bday) && date('d-m',$bday) <= date('d-m',$week_after)){
$this->future_bday[] = array('mem_name' => $members[$i]->name);
}
}
The date format returned from the db is yyyy-mm-dd
ie 1960-06-12
. 从db返回的日期格式是
yyyy-mm-dd
即1960-06-12
。 This code works fine for 1 week before and today but 1 week after returning if the year is below 1970 and 1 week after condition completely fails. 如果年份低于1970年和条件完全失败后1周,此代码可以在1周前和今天正常工作,但在返回后1周。
Can anyone provide me with proper date manipulation for the correct results please? 有人能为我提供正确的日期操作吗?
I think that your trouble is because strtotime
return seconds from UNIX epoch and that's actually 1970. I'd better compare dates directly in database: SELECT ADDDATE('2008-01-02', INTERVAL 1 WEEK);
我认为你的麻烦是因为
strtotime
从UNIX纪元返回秒,实际上是1970年。我最好直接在数据库中比较日期: SELECT ADDDATE('2008-01-02', INTERVAL 1 WEEK);
or SELECT SUBDATE('2008-01-02', INTERVAL 1 WEEK);
或
SELECT SUBDATE('2008-01-02', INTERVAL 1 WEEK);
You can also do that like this: 你也可以这样做:
$datetime1 = new DateTime('2009-10-11');
$datetime2 = new DateTime('2009-10-13');
$interval = $datetime1->diff($datetime2);
if((integer) $interval->format('%R%a') > 7) // More than week
Try This: 尝试这个:
<?php
$m= date("m"); // Month value
$de= date("d"); //today's date
$y= date("Y"); // Year value
for($i=0;$i<count($members);$i++){
$mem_bod_explode=explode("-",$members[$i]->dob);
$m_bday = mktime(0,0,0,$mem_bod_explode[1],$mem_bod_explode[2],$y);
//$bday_date = date('d',$m_bday);
//$bday_month = date('m',$m_bday);
//$bday = $m_bday;
//echo $bday_date."</br>".$bday_month."</br>".$members[$i]->dob."</br>".date('Y-m-d',$bday);exit;
$week_before = mktime(0,0,0,$mem_bod_explode[1],$mem_bod_explode[2]-7,$y);
$week_after = mktime(0,0,0,$mem_bod_explode[1],$mem_bod_explode[2]+7,$y);
echo date('Y-m-d',$week_before);
echo"<br>";
echo date('Y-m-d',$week_after);
echo"<br>";
echo date('Y-m-d');
if(date('Y-m-d') == date('Y-m-d',$m_bday)){
$present_bday[] = array('mem_name'=> $members[$i]->name);
}
else if(date('Y-m-d',$m_bday)<date('Y-m-d') && date('Y-m-d',$m_bday)>=date('Y-m-d',$week_before)){
$past_bday[] = array('mem_name'=> $members[$i]->name);
}
else if(date('Y-m-d',$m_bday)>date('Y-m-d') && date('Y-m-d',$m_bday)<=date('Y-m-d',$week_after)){
$future_bday[] = array('mem_name'=> $members[$i]->name);
}
}
?>
Try This Code .Hope this will help you. 试试这个代码。希望这会对你有所帮助。
$m= date("m"); // Month value
$de= date("d"); //today's date
$y= date("Y"); // Year value
for($i=0;$i<count($members);$i++){
$mem_bod_explode=explode("-",$members[$i]->dob);
$m_bday = mktime(0,0,0,$mem_bod_explode[1],$mem_bod_explode[2],$mem_bod_explode[0]);
$bday_date = date('d',$m_bday);
$bday_month = date('m',$m_bday);
$bday = $m_bday;
//echo $bday_date."</br>".$bday_month."</br>".$members[$i]->dob."</br>".date('Y-m-d',$bday);exit;
$week_before = mktime(0,0,0,$mem_bod_explode[1],$mem_bod_explode[2]-7,$mem_bod_explode[0]);
$week_after = mktime(0,0,0,$mem_bod_explode[1],$mem_bod_explode[2]+7,$mem_bod_explode[0]);
if(date('d-m') == date('d-m',$bday)){
$this->present_bday[] = array('mem_name'=> $members[$i]->name);
}
else if(date('d-m',$week_before) <= date('d-m',$bday) && date('d-m',$bday) < date('d-m')){
$this->past_bday[] = array('mem_name' => $members[$i]->name);
}
else if(date('d-m')< date('d-m',$bday) && date('d-m',$bday) <= date('d-m',$week_after)){
$this->future_bday[] = array('mem_name' => $members[$i]->name);
}
}
i compared the dates in database query itself came up with something like this 我比较了数据库查询本身的日期,得出了类似的东西
$res = $this->db->query("SELECT * FROM members WHERE DAYOFYEAR(curdate()) - 7 <= dayofyear(dob) AND DAYOFYEAR(curdate()) +7 >= dayofyear(dob);")->result();
$weekbfr_mem = $this->db->query("SELECT * FROM members WHERE DAYOFYEAR(curdate()) - 7 <= dayofyear(dob) AND dayofyear(dob) < DAYOFYEAR(curdate());")->result();
$bday_mem = $this->db->query("SELECT * FROM members WHERE DAYOFYEAR(curdate()) = dayofyear(dob);")->result();
$weekafter_mem = $this->db->query("SELECT * FROM members WHERE DAYOFYEAR(curdate()) < dayofyear(dob) AND dayofyear(dob) <= DAYOFYEAR(curdate()+7);")->result();
the main disad in this i have to make 3 query to server its slow for project.so any idea about doing in php function itself. 在这个主要的disad我必须使3服务器的查询缓慢的项目。所以任何关于在PHP函数本身做的想法。
Try the below code for testing:
I have putted date 1983-10-30 and its showing in Past.
<?php
$m= date("m"); // Month value
$de= date("d"); //today's date
$y= date("Y"); // Year value
for($i=0;$i<1;$i++){
$mem_bod_explode=explode("-","1983-10-30");
$m_bday = mktime(0,0,0,$mem_bod_explode[1],$mem_bod_explode[2],$y);
//$bday_date = date('d',$m_bday);
//$bday_month = date('m',$m_bday);
//$bday = $m_bday;
//echo $bday_date."</br>".$bday_month."</br>".$members[$i]->dob."</br>".date('Y-m-d',$bday);exit;
$week_before = mktime(0,0,0,$mem_bod_explode[1],$mem_bod_explode[2]-7,$y);
$week_after = mktime(0,0,0,$mem_bod_explode[1],$mem_bod_explode[2]+7,$y);
echo date('Y-m-d',$week_before);
echo"<br>";
echo date('Y-m-d',$week_after);
echo"<br>";
echo date('Y-m-d');
if(date('Y-m-d') == date('Y-m-d',$m_bday)){
$present_bday[] = array('mem_name'=> "fgfg");
}
else if(date('Y-m-d',$m_bday)<date('Y-m-d') && date('Y-m-d',$m_bday)>=date('Y-m-d',$week_before)){
$past_bday[] = array('mem_name' => "gfgfg");
}
else if(date('Y-m-d',$m_bday)>date('Y-m-d') && date('Y-m-d',$m_bday)<=date('Y-m-d',$week_after)){
$future_bday[] = array($members[$i]->name);
}
}
echo"<br>";
echo"Past Birthday:<br>";
print_r($past_bday);
echo"<br>";
echo"Present Birthday:<br>";
print_r($present_bday);
echo"<br>";
echo"Future Birthday:<br>";
print_r($future_bday);
echo"<br>";
?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.