求一自定义函数,需要取得当月的开始时间和结束时间的时间戳!
如:现在是4月,那就取得2010年4月1日00:00:00的时间戳和2010年4月30日23:59:59的时间戳!!!
但是有没有什么好的方法呢?需要精确到秒,判断是不是闰年,当月是30日结束还是31日结束或者是28、29??
请高手指教
我自己想到了! 感谢大家的帮助,不知道我的这个方法是不是最好的?
function datestage($year, $month)
{
$starttime = strtotime($year.'-'.$month.'-01');
$endmonth = $month == 12 ? 1 : $month + 1;
$endyear = $month == 12 ? $year + 1 : $year;
$endtime = strtotime($endyear.'-'.$endmonth.'-01') - 1;
return $starttime.$endtime;
}
开始时间自然是很简单的,然后月份+1,如果是12月那就返回1月,日自然也是01日,在把得到的时间戳减1就可以了!
没必要自己判断,系统有读取本月天数的函数date('t')。这个要是不对,你砍我!调试过!
$y=date("Y",time());
$m=date("m",time());
$d=date("d",time());
$t0=date('t'); // 本月一共有几天
$t1=mktime(0,0,0,$m,1,$y); // 创建本月开始时间
$t2=mktime(23,59,59,$m,$t0,$y); // 创建本月结束时间
echo "今天时间\t".date("Y-m-d",time())."<br>";
echo "本月开始\t".date("Y-m-d H:i:s",$t1)."<br>";
echo "本月结束\t".date("Y-m-d H:i:s",$t2)."<br>";
echo "时间差:";
echo $t2-$t1."<br>";
$y=date("Y",time());
$m=date("m",time());
$d=date("d",time());
$t0=date('t'); // 本月一共有几天
$t1=mktime(0,0,0,$m,1,$y); // 创建本月开始时间
$t2=mktime(23,59,59,$m,$t0,$y); // 创建本月结束时间
echo "今天时间\t".date("Y-m-d",time())."<br>";
echo "本月开始\t".date("Y-m-d H:i:s",$t1)."<br>";
echo "本月结束\t".date("Y-m-d H:i:s",$t2)."<br>";
echo "时间差:";
echo $t2-$t1."<br>";
温馨提示:答案为网友推荐,仅供参考
第1个回答 2010-04-07
<?
date_default_timezone_set('PRC');
echo "<br><br>";
echo date("Y-m-d H:i:s");
echo "<br><br>";
echo "<br>时间戳是: ";
echo $time=time();//你可以试试改变这个做测试
echo $d=date("d",$time);//你可以试试改变这个做测试
$tommorrow=$time+3600*24;
echo "<br><br>";
echo $t=date("Y-m-d H:i:s",$tommorrow);
$t=date("d",$tommorrow);
echo "<br><br>";
//判断第一天时间戳
if($d==1){
if($t_time=="00:00:00"){
echo time(); //这是最后一天 结束的时间戳
}
}
//判断最后一天时间戳
if($d>$t){
echo "这是最后一天";
echo $t_time=date("H:i:s");//现在时间 24小时制
if($t_time=="23:59:59"){
echo time(); //这是最后一天 结束的时间戳
}
}
?>
测试通过 ,应该是这样吧!
思路 : 第一天 很好判断: 就是1号
最后一天 : 只有一个月的最后一天 日期才大于 明天的(31>1,29>1,30>1,28>1)
date_default_timezone_set('PRC');
echo "<br><br>";
echo date("Y-m-d H:i:s");
echo "<br><br>";
echo "<br>时间戳是: ";
echo $time=time();//你可以试试改变这个做测试
echo $d=date("d",$time);//你可以试试改变这个做测试
$tommorrow=$time+3600*24;
echo "<br><br>";
echo $t=date("Y-m-d H:i:s",$tommorrow);
$t=date("d",$tommorrow);
echo "<br><br>";
//判断第一天时间戳
if($d==1){
if($t_time=="00:00:00"){
echo time(); //这是最后一天 结束的时间戳
}
}
//判断最后一天时间戳
if($d>$t){
echo "这是最后一天";
echo $t_time=date("H:i:s");//现在时间 24小时制
if($t_time=="23:59:59"){
echo time(); //这是最后一天 结束的时间戳
}
}
?>
测试通过 ,应该是这样吧!
思路 : 第一天 很好判断: 就是1号
最后一天 : 只有一个月的最后一天 日期才大于 明天的(31>1,29>1,30>1,28>1)
第2个回答 2010-04-07
我的思路是:
判断月初的时间很好办,1日的00:00:00就可以了
判断每月最后一天你用checkdate()函数,依次检查y年m月(31/30/29)日的时间是否合法就可以判断出来了。
判断月初的时间很好办,1日的00:00:00就可以了
判断每月最后一天你用checkdate()函数,依次检查y年m月(31/30/29)日的时间是否合法就可以判断出来了。
第3个回答 2010-04-07
下面的代码调试通过,绝对保证正确,希望你能够看明白:
<?php
$today=localtime(time(), true);
$m_start=mktime(0,0,0,$today['tm_mon'],1,$today['tm_year']);
if ($today['tm_mon']==11){
$today['tm_mon']=0;
$today['tm_year']++;
}else $today['tm_mon']++;
$m_stop=mktime(0,0,0,$today['tm_mon'],1,$today['tm_year'])-1;
//显示结果
print_r(localtime($m_start, true));
print_r(localtime($m_stop, true));
?>
<?php
$today=localtime(time(), true);
$m_start=mktime(0,0,0,$today['tm_mon'],1,$today['tm_year']);
if ($today['tm_mon']==11){
$today['tm_mon']=0;
$today['tm_year']++;
}else $today['tm_mon']++;
$m_stop=mktime(0,0,0,$today['tm_mon'],1,$today['tm_year'])-1;
//显示结果
print_r(localtime($m_start, true));
print_r(localtime($m_stop, true));
?>