导航:首页 > 编程语言 > php计算剩余时间

php计算剩余时间

发布时间:2025-07-14 05:03:49

‘壹’ 关于php 时间戳转换年月日问题。

<?PHP
/*
*==============================
*此方法由mantye提供
*http://my.oschina.net/u/223350
*@date2014-07-22
*==============================
*@description取得两个时间戳相差的年龄
*@before较小的时间戳
*@after较大的时间戳
*@returnstr返回相差年龄y岁m月d天
**/
$after=1529380306;
$before=time();
functiondatediffage($before,$after){

if($before>$after){
$b=getdate($after);
$a=getdate($before);
}else{
$b=getdate($before);
$a=getdate($after);
}

$n=array(1=>31,2=>28,3=>31,4=>30,5=>31,6=>30,7=>31,8=>31,9=>30,10=>31,11=>30,12=>31);
$y=$m=$d=0;

if($a['mday']>=$b['mday']){//天相减为正

if($a['mon']>=$b['mon']){//月相减为正
$y=$a['year']-$b['year'];$m=$a['mon']-$b['mon'];
}else{//月相减为负,借年
$y=$a['year']-$b['year']-1;$m=$a['mon']-$b['mon']+12;
}

$d=$a['mday']-$b['mday'];

}else{//天相减为负,借月
if($a['mon']==1){//1月,借年
$y=$a['year']-$b['year']-1;$m=$a['mon']-$b['mon']+12;$d=$a['mday']-$b['mday']+$n[12];
}else{

if($a['mon']==3){//3月,判断闰年取得2月天数
$d=$a['mday']-$b['mday']+($a['year']%4==0?29:28);
}else{
$d=$a['mday']-$b['mday']+$n[$a['mon']-1];
}


if($a['mon']>=$b['mon']+1){//借月后,月相减为正
$y=$a['year']-$b['year'];$m=$a['mon']-$b['mon']-1;
}else{//借月后,月相减为负,借年
$y=$a['year']-$b['year']-1;$m=$a['mon']-$b['mon']+12-1;
}


}


}

return($y==0?'':$y.'年').($m==0?'':$m.'个月').($d==0?'':$d.'天');

}
echodatediffage($before,$after)
?>

‘贰’ PHP函数执行时间过长无响应,有什么优化的办法

可以采用MQ,首先将task丢进Q里面,然后给出用户提示,前台页面轮询后台结果。
如果数据量过大建议分批处理,拆分成多个task即可。

‘叁’ php循环倒计时的代码

这个可能要配合子框架和JS的功能来实现.
思路是:
1. 在主框架页面上,安排一个表单 + 一个文本框(设变量名为 end_time),用来设置时间(target 指向子框)(日期格式: 2009-05-28 12:00:00 )
2. 再插入一个对象用来显示剩余时间(可以是文本框,也可以是<span>标记,还可以是其它可以用JS替换内容的对象就可以了)(假设它的标记是<span id="timeout"></span>).
3. 在主框架上插入一子框架,子框架的源文件指向php文件
4. 在PHP源文件中插入适当代码.代码的作用主要分几部分,
A.计算剩余时间
B.用于更新主页面的剩余时间对象的JS代码.
C.适当设置页面刷新的时间(用JS或刷页刷新代码)

部分代码:
1.主框架(index.php)
<form action="timer.php" method="post" name="form1" target="timerframe" id="form1">
<table border="0">
<tr>
<td>开始时间
<label></label></td>
<td><input name="end_time" type="text" id="end_time" value="<?php echo date("Y-m-d H:i:s");?>" /></td>
<td><label>
<input type="submit" name="Submit" value="提交" />
</label></td>
</tr>
</table>
<table width="400" border="0">
<tr>
<td> </td>
</tr>
<tr>
<td>离结束还有:<span class="STYLE1" id="timeout">aaaaa</span></td>
</tr>
</table>
</form>
<iframe name="timerframe" width="1" height="1"></iframe>

2.子框架(timer.php)
<body>
<?php
$endTime=strtotime($_REQUEST['end_time']); //将终止时间转为nix_timestamp格式
$now=time(); //当前时间
//printf( "N:%s,\n<br>E:%s\n<br>",$now,$endTime);
if($now>=$endTime) //如果时间已过结束时间
{

?>
<script language="javascript">
var f=parent.document.getElementById("form1")
f.end_time.value='<?php echo date("Y-m-d H:i:s",$endTime+2*3600);?>'
f.submit()
</script>
<?php
exit;
}
$timeLeft=$endTime-$now; //计算剩余的秒数,并转换为对应的 时:分:秒 的格式
?>
<script language="javascript">
parent.document.getElementById("timeout").innerHTML='<?php echo date("H:i:s",$timeLeft-8*3600);?>'
function refresh()
{
var f=parent.document.getElementById("form1")
f.submit();
}
setTimeout("refresh()",5000)
</script>
</body>

阅读全文

与php计算剩余时间相关的资料

热点内容
程序员染发被开除 浏览:391
我的世界怎么命令魔方 浏览:50
javascript面向对象编程pdf 浏览:879
电脑里所有的文件夹都打不开了 浏览:495
android条码扫描源码 浏览:362
linux反编译到c 浏览:610
oppo手机大文件夹怎么设置 浏览:273
程序员必须写日报吗 浏览:299
javaint转换成byte 浏览:54
汽车压缩机不运行 浏览:341
linux内核存储 浏览:970
常规加密区长度 浏览:171
别克君越显示屏怎么装app 浏览:693
命令母亲 浏览:716
航母pdf 浏览:877
即拼商城软件源码 浏览:207
王羲之小楷pdf 浏览:859
手机wifi为什么连接不上服务器 浏览:187
什么可以解压解困 浏览:480
程序员关注代码质量 浏览:537