php 时间比较,这个有点特殊

日久情深 2010-09-17 10:15:07
问题如下:
要判断用户是否连续登陆,根据时间判断,现在的问题是,如何去判断时间,
假如,用户首次登陆时间为:2010-7-10 下来登陆时间是:2010-7-11 这两个时间好判断,因为是同年同月月,所以直接去date('d',time());就可以了
但是,当时间不是同月的时候,就不好判断了,,,如下:首次登陆为:2010-7-31 下次登陆为2010-8-1 使用上面的方法就没法判断了。
还有不同年,却同月的情况,,,请问,,像这种情况该如何判断?

...全文
384 点赞 收藏 16
写回复
16 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
日久情深 2010-09-18
呵呵
谢谢兄弟们回复。。不过你们的代码都不适合我的需求。。但是非常感谢你们回复
最后写好的代码如下:

/*
* 参数:
* $d1------最新时间
* $d2------以前的时间
* 返回值:
* 1-----连续登陆。时间相差1天。
* 2-----没有连续登陆,时间相差最少2天以上
* 3-----天数相同。
* 0-----参数传递错误。
*/
function Day_Diff($d1,$d2)
{
$d2_array=explode('-', $d2);
$d1_array=explode('-', $d1);

$d1_Y=$d1_array[0];
$d1_M=$d1_array[1];
$d1_D=$d1_array[2];

$d2_Y=$d2_array[0];
$d2_M=$d2_array[1];
$d2_D=$d2_array[2];

if($d1_Y-$d2_Y==1)
{
if($d2_M<$d1_M)
{
return 2;
}
else if($d2_M>=$d1_M)
{
if(($d1_M+12)-$d2_M==1)
{
$temp=gettheday($d2);
$temp=explode('-', $temp[1]);
$temp=$temp[2]; //得到该月的最后一天
$temp=($temp-$d2_D)+$d1_D; //用最后一天减去当前时间的天数加上新时间的天数
if($temp==1)
{
return 1;
}
else
{
return 2;
}
}
else
{
return 2;
}
}
else
{
return 0;
}
}
else if($d2_Y==$d1_Y)
{
if($d2_M<$d1_M)
{
$temp = strtotime("-1 month", $d1);
$temp=date("t", $temp);
$temp=($temp-$d2_D)+$d1_D;
if($temp==1)
{
return 1;
}
else
{
return 2;
}
}
else if($d2_M==$d1_M)
{
if($d1_D-$d2_D==1)
{
return 1;
}
else if($d1_D-$d2_D==0)
{
return 3;
}
else
{
return 2;
}
}
else
{
return 0;
}
}
else
{
return 2;
}
}

/*
*参数:
* $date--------获取一个月的第一天和最后一天。
* 返回值:
* Array类型,第一个是月第一天,第二个是月最后一天。
*/
function gettheday($date)
{
$firstday = date("Y-m-01",strtotime($date));
$lastday = date("Y-m-d",strtotime("$firstday +1 month -1 day"));
return array($firstday,$lastday);
}
回复
床上等您 2010-09-17
上次时间戳与现在时间戳相减 24*60*60 就是一天。小于一天就ok了。
回复
chinajoy2012 2010-09-17
将两个时间转换为 unix 时间戳之后,分别除以86400(一天的秒数),再相减,就OK啦
回复
amani11 2010-09-17
[Quote=引用 9 楼 dangjianghao 的回复:]

amani11 提供的 方法,在本月内适合,但是两个月份不相同的情况下,相见结果不正确,
假如是:2010-9-30 2010-10-1 这个时间应该是相差一天。
还有就是跨年问题,假如是2010-12-31 2011-1-1
请问这个如何解决?谢谢啦
[/Quote]

呵呵,是我错了,,,,

ceil((strtotime("年月日A") - strtotime("年月日B"))/86400)
回复
yi890410 2010-09-17
嗯嗯 那用Unix时间戳最方便了
回复
xuzuning 2010-09-17
不知道你用何种格式保存登录时间
如果是 2010-12-31 这种格式,请先用 strtotime 函数将其转换为 unix 时间戳
其实只要保存 time 函数的返回值就可以了

一般的
$t = $t2 - $t1; //就是两时间相差的秒数
$t / 86400 就是相差的天数
回复
heyli 2010-09-17

$start= strtotime('2010-12-31');
$end= strtotime('2011-1-1');
echo ($end-$start) / (3600 * 24) ;
回复
日久情深 2010-09-17
amani11 提供的 方法,在本月内适合,但是两个月份不相同的情况下,相见结果不正确,
假如是:2010-9-30 2010-10-1 这个时间应该是相差一天。
还有就是跨年问题,假如是2010-12-31 2011-1-1
请问这个如何解决?谢谢啦
回复
xuzuning 2010-09-17
只用 unix 时间戳比较就可以了,精确到秒
回复
yuexiangyun 2010-09-17
LZ的意思是想要对比两个日期大小来判断是否连续?按如下例子做就可以了:

$date1=time();
$date2="2009-12-31";
if(date("Y-m-d",date1)>date("Y-m-d",strtotime($date2))){
print "date1>date2";
}
else{
print "date1<=date2";
}

strtotime函数的作用是把字符串转换成日期格式,"Y-m-d"是date函数输出日期的格式。
回复
yi890410 2010-09-17
直接得到连词登陆的时间差不可以吗?

还有就是连续登陆时按什么规律来说的

如果是按不是同一天登陆的话那就直接判断当前日期的0点和上次登陆的日期0点的时间差
回复
amani11 2010-09-17
date("Ymd", $time)//这个结果就是 8位整数,,两个想减,两次登陆,就是相差天数了
回复
gengxuliang 2010-09-17
$time=date('Y-m-d');判断$time存在几个 就是当天登陆过几次
回复
日久情深 2010-09-17
.....不是这样噢。。晕。。谢谢回复。。是判断日期是否连续。。
还有就是比较新时间和旧时间差几天。。要可以判断出新时间和旧时间差两天
再有就是还得考虑跨月和跨年的问题。
回复
gaozhen1990 2010-09-17
回复
amani11 2010-09-17
date("Y-m-d", $time)//年月日

date("Y-m-d H:i:s", $time)//年月日小时分秒

$time是个时间戳,省略了,默认是当前时间
回复
相关推荐
发帖
PHP
创建于2008-08-27

1.9w+

社区成员

“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
申请成为版主
帖子事件
创建了帖子
2010-09-17 10:15
社区公告
暂无公告