
代码如下:
function getWeekRange($date){
$ret=array();
$timestamp=strtotime($date);
$w=strftime('%u',$timestamp);
$ret['sdate']=date('Y-m-d 00:00:00',$timestamp-($w-1)86400);
$ret['edate']=date('Y-m-d 23:59:59',$timestamp+(7-$w)86400);
return $ret;
}
// 获取指定日期所在月的开始日期与结束日期
function getMonthRange($date){
$ret=array();
$timestamp=strtotime($date);
$mdays=date('t',$timestamp);
$ret['sdate']=date('Y-m-1 00:00:00',$timestamp);
$ret['edate']=date('Y-m-'$mdays' 23:59:59',$timestamp);
return $ret;
}
// 以上两个函数的应用
function getFilter($n){
$ret=array();
switch($n){
case 1:// 昨天
$ret['sdate']=date('Y-m-d 00:00:00',strtotime('-1 day'));
$ret['edate']=date('Y-m-d 23:59:59',strtotime('-1 day'));
break;
case 2://本星期
$ret=getWeekRange(date('Y-m-d'));
break;
case 3://上一个星期
$strDate=date('Y-m-d',strtotime('-1 week'));
$ret=getWeekRange($strDate);
break;
case 4: //上上星期
$strDate=date('Y-m-d',strtotime('-2 week'));
$ret=getWeekRange($strDate);
break;
case 5: //本月
$ret=getMonthRange(date('Y-m-d'));
break;
case 6://上月
$strDate=date('Y-m-d',strtotime('-1 month'));
$ret=getMonthRange($strDate);
break;
}
return $ret;
}
签到功能主要是需要获取上次签到时间,然后进行比对,如果比较之后在零点之后,且大于24小时,就认为连续签到失败。
关键点:每次需要记录签到时间,这样以后无论是根据记录,还是相应算法都可以统计相关的签到记录。
签到功能核心就是时间的比较,只要比对好时间,然后封装签到方法,就可以轻松记录签到情况。
现在以2010年6月14日为例说明。6月份共有30天,在这个日历表中共5行,首先需要确定当前所在的日期(当然也可以指定一个日期),比如14日,通过表格可以知道它在第3行对应星期一那列(第3周)。通常每个月第1天不是在表格开始的位置,位置并不固定,同样不固定的还有每个月的周数,有时候是4周,有时候是5周。这样,想要完成这个日历表格就需要确定一些基础的日期变量,下面具体来看需要设定的基础变量。
PHP提供了date()函数,该函数提供了丰富的日期处理功能。现在需要获得的数据有两个,第一个是当月的总天数;第二个是该月的第一天所在星期中的第几天,数字表示0(表示星期天)到6(表示星期六)。通过date()函数可以很容易获得上面的数据。
<php
//date()函数的基本用法
$year = date('Y'); //获得年份,例如2006
$month = date('n'); //获得月份,例如04
$day = date('j'); //获得日期,例如3
>
通过mktime()函数和date()函数获得当月的总天数。
//获得当月的总天数
$daysInMonth = date("t",mktime(0,0,0,$month,1,$year));
同样是组合使用mktime()函数和date()函数,获得该月的第一天所在星期中的第几天,数字表示0(表示星期天)到6(表示星期六)。
//获得每个月的第一天,例如4
$firstDay = date("w", mktime(0,0,0,$month,1,$year));
现在重新来观察下这个日历表格,我们发现,表格中的值是从1到x(当月的总天数)。我们可以形象地通过一个坐标来表示每一个位置(x,y),表格的起始位置是(0,0),结束位置是(5,4),当月第一天的起始位置是(0,3)。现在来创建一个二维数组来存储对应的日期。
(1)需要获得表格的数目。
//计算数组中的日历表格数
$tempDays = $firstDay + $daysInMonth;
(2)需要算出该月一共有几周(即表格的行数)。
//获得表格行数
$weeksInMonth = ceil($tempDays/7);
(3)在获得行数的变量之后,创建一个二维数组用来存放日期信息,代码如下:
<php
for($j=0;$j<$weeksInMonth;$j++)
{
for($i=0;$i<7
;$i++)
{
$counter ++;
$week [$j] [$i] = $counter;
}
}
>
(4)细心的读者可能发现,上面的代码其实是一个雏型,因为它处理出来的数据并没有过滤那些空白的表格单元。下面来继续改造下这段代码,加入过滤和构造的部分。改造后的代码如下:
<php
//创建日期二维数组
for($j = 0; $j < $weeksInMonth; $j ++) {
for($i = 0; $i < 7; $i ++) {
$counter ++;
$week [$j] [$i] = $counter;
//日期偏移量
$week [$j] [$i] -= $firstDay;
if (($week [$j] [$i] < 1) || ($week [$j] [$i] > $daysInMonth)) {
$week [$j] [$i] = "";
}
}
}
>
(5)在获得正确的二维数组之后,就可以通过foreach()函数将存储的日期信息遍历出来,同时插入HTML标签创建日期
不知是否正确,转自我的一个朋友
计算本周的,需要对今天进行判断,先计算出是星期几,然后计算出星期一是 几月几号,在算出星期天是几月几号, 然后在写到sql中,比如 2009-03-09到2009-03-15的话,sql就是
SELECT count( ID ) AS c FROM dede_archives WHERE UNIX_TIMESTAMP( '2009-03-15') > pubdate > UNIX_TIMESTAMP('2009-03-09') 下面还有一例。本月统计(MySQL)
select from booking where month(booking_time) = month(curdate()) and year(booking_time) = year(curdate())本周统计(MySQL)
select from spf_booking where month(booking_time) = month(curdate()) and week(booking_time) = week(curdate())
<php
function weekday()
{
$i=date('w') ;
switch ($i)
{
case 0: $str = "星期日"; break;
case 1: $str = "星期一"; break;
case 2: $str = "星期二"; break;
case 3: $str = "星期三"; break;
case 4: $str = "星期四"; break;
case 5: $str = "星期五"; break;
case 6: $str = "星期六"; break;
}
return $str;
}
echo weekday();
>
申明,这个获取的时间,是服务器上的时间。
如果你要获取本地的时间,建议你采用js代码实现。
PHP获取开始和结束时间
//当前时间
$start
=
strtotime(date('Y-m-d
H:i:s'));
//时长,时间长度(秒为单位,例子中为120秒,2分钟后,实际时间可自行修改或程序计算得出)
//如果是1周后,则为$start
+
(7
24
60
60);
$long
=
$start
+
120
//结束时间
$end
=
date('Y-m-d
H:i:s',
$long);
php可以用函数time()来获取Unix
时间戳,但是只能获取当前的,不能填入参数计算
以上就是关于PHP获取当前日期所在星期(月份)的开始日期与结束日期(实现代码)全部的内容,包括:PHP获取当前日期所在星期(月份)的开始日期与结束日期(实现代码)、怎么用php来获取时间 周次 节次来做签到功能、php日历模块的运算逻辑求解!如何求日期对应的星期几!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)