php判断时间范围

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php判断时间范围相关的知识,希望对你有一定的参考价值。

营业时间为2个变量
开始时间:opentime和结束时间:closetime,格式都是00:00:00
我要判断当前时间是否在这个区间内,一般情况下就是判断当前时间大于开始,小于结束就可以。
但是碰到一个问题,如果开始时间比结束时间大,比如:晚上20点30分开始营业到凌晨2点10分结束,该怎么处理这种情况?

麻烦写个方法给我,谢谢。
我要把这个作为sql的条件的,读取只有在营业时间内的数据

你这个要在判断时把日期加上。即当结束时间小于开始时间的时候区间是今天开始到明天结束。

其实这个东西设计本身有问题,所以处理起来就复杂了,我建议你改数据库去,总体时间/复杂度成本都低一些。

两个字段应该分别是开始时间和持续时长,这样就没有你说的问题了。只不过当你需要显示结束营业时间的时候做个小计算就好了。
参考技术A 时间戳是最好的办法了,如果是固定的每天晚上20点30分开始营业到凌晨2点10分结束,那么假设开门时间的时间戳是:111111111;关门时间的时间戳是:2222222222;当前时间是:xxxxxxxxxx;这样你就好判断了吧~
此处注意的就是所有的时间要用mktime(时,分,秒,月,日,年)转换为时间戳~追问

那关门的时间戳小于开门的呢?不是还是要判断?

追答

你关门的时间戳怎么可能小于开门时间?时间戳是一直增大的整数,你开门时间和关门时间都是由日期的,你晚上20点30和凌晨2点完全是两个日期嘛,你带进mktim(),例如:$opentime=(20,30,0,4,20,2013)是开门时间,那你关门时间应该是$closetime=mktime(2,10,0,4,21,2013);
显然$opentime<$closetime;你自己可以试一下~

追问

填写的开关门时间格式是:00:00,mktime或者strtotime都是自动加入当前年月日来获取时间戳的,这样就存在一个问题,当客户这样填写:
开始营业时间:10:00
结束营业时间:02:30
那得到的时间戳,结束时间就会小于开始时间了。而且当访问者在凌晨访问网站的时候,now()的时间戳也会小于开业时间戳的。所以必须要判断,现在自己写了个判断解决了,还算比较简洁,凑合用吧。

本回答被提问者采纳
参考技术B 你这只有时分秒 没有年月日,算着营业时间很费劲的。
1号的晚上20点30 营业到3号的凌晨2点10分 你只写 20点30分 2点10分 ?
1号的晚上20点30 营业到4号的凌晨2点10分 你只写 20点30分 2点10分?
我不清楚会不会有这种事,万一真有,那这事就难办了。

建议 opentime和结束时间:closetime,格式都是 2013-04-19 00:00:00
这样算营业时间就没问题了。。。追问

这位大哥,有年月日小时分钟的时间戳判断谁大谁小的情况,只要不是个脑残就会了,也不可能在这里问啊。
我要的只是该店铺每天开门和打烊的时间,怎么可能让他填写年月日?那营业开始时间填了2013年4月20日8:00的话,难道21日就不营业了?明显是不可能的事情嘛。
算了,可能是我自己问题没写仔细,或者各位大哥太忙,没看清楚问题。
总之现在自己写了个判断解决了,哎,天下没有不劳而获的事情啊。

参考技术C 用 mktime() 函数将日期字符串转换为时间戳。然后 以判断就 完事了 参考技术D 用时间戳,别用普通时间

Android判断当前系统时间是否在指定时间的范围内(免消息打扰)

/**
* 判断当前系统时间是否在指定时间的范围内
*
* @param beginHour
* 开始小时,例如22
* @param beginMin
* 开始小时的分钟数,例如30
* @param endHour
* 结束小时,例如 8
* @param endMin
* 结束小时的分钟数,例如0
* @return true表示在范围内,否则false
*/
public static boolean isCurrentInTimeScope(int beginHour, int beginMin, int endHour, int endMin) {
boolean result = false;
final long aDayInMillis = 1000 * 60 * 60 * 24;
final long currentTimeMillis = System.currentTimeMillis();
 
Time now = new Time();
now.set(currentTimeMillis);
 
Time startTime = new Time();
startTime.set(currentTimeMillis);
startTime.hour = beginHour;
startTime.minute = beginMin;
 
Time endTime = new Time();
endTime.set(currentTimeMillis);
endTime.hour = endHour;
endTime.minute = endMin;
 
if (!startTime.before(endTime)) {
// 跨天的特殊情况(比如22:00-8:00)
startTime.set(startTime.toMillis(true) - aDayInMillis);
result = !now.before(startTime) && !now.after(endTime); // startTime <= now <= endTime
Time startTimeInThisDay = new Time();
startTimeInThisDay.set(startTime.toMillis(true) + aDayInMillis);
if (!now.before(startTimeInThisDay)) {
result = true;
}
} else {
// 普通情况(比如 8:00 - 14:00)
result = !now.before(startTime) && !now.after(endTime); // startTime <= now <= endTime
}
return result;
}

以上是关于php判断时间范围的主要内容,如果未能解决你的问题,请参考以下文章

php判断时间范围

jquery 判断当前时间是不是在时间范围内

switch范围判断

PHP:选择时间范围重叠日期的重叠日期时间范围

拿来即用的 Python 时间范围判断方法

拿来即用的 Python 时间范围判断方法