php再次时间问题求助

时间:2022-10-19 16:18:15
各位大大, 上次小弟曾发过几个帖子关于php时间问题。下面是几位大大给的代码。


$startdate=strtotime("$fdatevar");    //开始日期

$enddate=strtotime("+3 months","$startdate");    //开始日期加上三个月

$days=round(($enddate-$startdate)/3600/24);        //开始到结束一共有几天

$date=strtotime(date("Y/m/d"));            //今天
$d=round(($date-$startdate)/3600/24);        //开始日期到今天一共有几天

$daysleft=($days -$d);                     //今天到结束那天还剩多少天


上面是代码,完全可用。小弟想再改进一下,第一次运行以后得到剩余的天数后$daysleft(上面的代码),上面的代码以后再也不运行了。但是每过一天,$daysleft就会自动减少一天,请问如何写呀??着急中。。。。。

谢谢各位大大

14 个解决方案

#1


上面的代码以后再也不运行了。但是每过一天,$daysleft就会自动减少一天,
*******************************************************************
? 什么意思

#2


楼上的大大,

意思是说 那些代码只运行一遍,得到剩余天数$daysleft后就不在运行了,然后$daysleft每过一天就减一。如何写呀??

谢谢

#3


是想它每天都自动运行一次,并减一  ??

#4


就是第一次输入的时候运行,以后再不运行了,不是每天运行一次,

主要的是$daysleft的值怎么每天减一呀??

谢谢

#5


顶,各位大大谁能帮我一下?

#6


if($_GET['ac']=='stop')
exit();
sleep(5);
$name=time();
$fp=fopen("$name.txt",'w');
fwrite($fp,time());
fclose($fp);
$fp = fsockopen('localhost', 80, $errno, $errmsg);
fputs($fp, "GET /test/time.php\r\n\r\n");
fclose($fp);

#7


楼上的大大,你给的代码对我来说太难了,
就是mysql里面有个值$daysleft  ,这个值每天减一, 怎么写呀》???

谢谢

#8


date_default_timezone_set('PRC');
function countDate($beginDate,$endDate)
{
$nowDate = date("Y-m-d");//今天的日期

$nowMk = strtotime($nowDate);//今天的时间戳
$beginMK = strtotime($beginDate);//开始日期的时间戳
$endMK = strtotime($endDate);//结束日期的时间戳
$daysTobegin = ceil(abs(($nowMk-$beginMK)/24/3600));//今天距开始日期的天数
$daysToend = ceil(abs(($endMK-$nowMk)/24/3600));//今天距结束日期的天数
return $daysTobegin."|".$daysToend;
}
$beginDate = "2010-5-1";
$endDate = "2010-10-31";
$showDays = countDate($beginDate,$endDate);//每次该脚本运行时就调用此函数一次,故每天都会不同的
$showDaysArr = explode("|",$showDays);
echo "今天离2010上海世博会开幕还有:".$showDaysArr[0]."天<br>";//以2010年上海世博会为例
echo "今天离2010上海世博会闭幕还有:".$showDaysArr[1]."天";

#9


引用 7 楼 dreamleiqi 的回复:
楼上的大大,你给的代码对我来说太难了,
就是mysql里面有个值$daysleft ,这个值每天减一, 怎么写呀》???

谢谢

麻烦楼主把你的需求详细说明下,想最终实现什么,便于大家帮你分析。

#10


楼上的大大,非常感谢你的代码,

1,打个比方,需要用户输入一个日期,输入之后自动根据输入的日期计算出三个月后是哪一天。
2,然后用三个月后的那天减去输入的那天(不是输入当天的日期,是用户所输入的日期),得出三个月共有多少天(90天?91天?之类的)
3,再算出当天的时间,用三个月后的时间减去当天的时间,就得到离三个月后结束的那天还剩下多少天。

以上三步的代码在此,

$startdate=strtotime("$fdatevar"); //开始日期

$enddate=strtotime("+3 months","$startdate"); //开始日期加上三个月

$days=round(($enddate-$startdate)/3600/24); //开始到结束一共有几天

$date=strtotime(date("Y/m/d")); //今天
$d=round(($date-$startdate)/3600/24); //开始日期到今天一共有几天

$daysleft=($days -$d); //今天到结束那天还剩多少天



$daysleft就是还剩下多少天到结束的日子。
问题是我需要每过一天,$daysleft的值就减一。

求教各位大大,是不是把上面那些代码每天运行一次$daysleft的值就会减一??

#11


其實你可以寫一個任務計畫的....

#12


楼上的大大什么意思??

#13


用户页面countdate.html,日期格式形如2010-5-1 (年-月-日),你可以写个正则验证来验证日期格式是否合法,比较简单的,我就不写了。
<html>
<form action="countdate.php" method="POST">
beginDate:<input name="beginDate" type="text" value=''>
<p>
endDate:<input name="endDate" type="text" value = "">
<input type="submit" value="submit">
</form>
</html>

php处理页面,采用post方式传参,直接输出到浏览器
<?php
date_default_timezone_set("PRC");
function countDate($beginDate,$endDate)
{
$nowMk = strtotime(date("Y-m-d"));//今天的时间戳
$beginMK = strtotime($beginDate);//开始日期的时间戳
$endMK = strtotime($endDate);//结束日期的时间戳
$daysTobegin = ceil(abs(($nowMk-$beginMK)/24/3600));//今天距开始日期的天数
$daysToend = ceil(abs(($endMK-$nowMk)/24/3600));//今天距结束日期的天数
$alldays = ceil(abs(($endMK-$beginMK)/24/3600));//总天数
return $daysTobegin."|".$daysToend."|".$alldays;
}
$showDays = countDate($_POST["beginDate"],$_POST["endDate"]);//每调用此函数一次,参数是post传进来的
$showDaysArr = explode("|",$showDays);
echo "总共有".$showDaysArr[2]."天<br>";
echo "今天离".$_POST["beginDate"]."还有:".$showDaysArr[0]."天<br>";
echo "今天离".$_POST["endDate"]."还有:".$showDaysArr[1]."天";
?>


其实楼主的需求也完全可以用JS实现,不经过服务器处理。有时间可以再交流下。

#14


谢谢楼上的大大们,问题刚才我已经解决了,分数还是给你们。

#1


上面的代码以后再也不运行了。但是每过一天,$daysleft就会自动减少一天,
*******************************************************************
? 什么意思

#2


楼上的大大,

意思是说 那些代码只运行一遍,得到剩余天数$daysleft后就不在运行了,然后$daysleft每过一天就减一。如何写呀??

谢谢

#3


是想它每天都自动运行一次,并减一  ??

#4


就是第一次输入的时候运行,以后再不运行了,不是每天运行一次,

主要的是$daysleft的值怎么每天减一呀??

谢谢

#5


顶,各位大大谁能帮我一下?

#6


if($_GET['ac']=='stop')
exit();
sleep(5);
$name=time();
$fp=fopen("$name.txt",'w');
fwrite($fp,time());
fclose($fp);
$fp = fsockopen('localhost', 80, $errno, $errmsg);
fputs($fp, "GET /test/time.php\r\n\r\n");
fclose($fp);

#7


楼上的大大,你给的代码对我来说太难了,
就是mysql里面有个值$daysleft  ,这个值每天减一, 怎么写呀》???

谢谢

#8


date_default_timezone_set('PRC');
function countDate($beginDate,$endDate)
{
$nowDate = date("Y-m-d");//今天的日期

$nowMk = strtotime($nowDate);//今天的时间戳
$beginMK = strtotime($beginDate);//开始日期的时间戳
$endMK = strtotime($endDate);//结束日期的时间戳
$daysTobegin = ceil(abs(($nowMk-$beginMK)/24/3600));//今天距开始日期的天数
$daysToend = ceil(abs(($endMK-$nowMk)/24/3600));//今天距结束日期的天数
return $daysTobegin."|".$daysToend;
}
$beginDate = "2010-5-1";
$endDate = "2010-10-31";
$showDays = countDate($beginDate,$endDate);//每次该脚本运行时就调用此函数一次,故每天都会不同的
$showDaysArr = explode("|",$showDays);
echo "今天离2010上海世博会开幕还有:".$showDaysArr[0]."天<br>";//以2010年上海世博会为例
echo "今天离2010上海世博会闭幕还有:".$showDaysArr[1]."天";

#9


引用 7 楼 dreamleiqi 的回复:
楼上的大大,你给的代码对我来说太难了,
就是mysql里面有个值$daysleft ,这个值每天减一, 怎么写呀》???

谢谢

麻烦楼主把你的需求详细说明下,想最终实现什么,便于大家帮你分析。

#10


楼上的大大,非常感谢你的代码,

1,打个比方,需要用户输入一个日期,输入之后自动根据输入的日期计算出三个月后是哪一天。
2,然后用三个月后的那天减去输入的那天(不是输入当天的日期,是用户所输入的日期),得出三个月共有多少天(90天?91天?之类的)
3,再算出当天的时间,用三个月后的时间减去当天的时间,就得到离三个月后结束的那天还剩下多少天。

以上三步的代码在此,

$startdate=strtotime("$fdatevar"); //开始日期

$enddate=strtotime("+3 months","$startdate"); //开始日期加上三个月

$days=round(($enddate-$startdate)/3600/24); //开始到结束一共有几天

$date=strtotime(date("Y/m/d")); //今天
$d=round(($date-$startdate)/3600/24); //开始日期到今天一共有几天

$daysleft=($days -$d); //今天到结束那天还剩多少天



$daysleft就是还剩下多少天到结束的日子。
问题是我需要每过一天,$daysleft的值就减一。

求教各位大大,是不是把上面那些代码每天运行一次$daysleft的值就会减一??

#11


其實你可以寫一個任務計畫的....

#12


楼上的大大什么意思??

#13


用户页面countdate.html,日期格式形如2010-5-1 (年-月-日),你可以写个正则验证来验证日期格式是否合法,比较简单的,我就不写了。
<html>
<form action="countdate.php" method="POST">
beginDate:<input name="beginDate" type="text" value=''>
<p>
endDate:<input name="endDate" type="text" value = "">
<input type="submit" value="submit">
</form>
</html>

php处理页面,采用post方式传参,直接输出到浏览器
<?php
date_default_timezone_set("PRC");
function countDate($beginDate,$endDate)
{
$nowMk = strtotime(date("Y-m-d"));//今天的时间戳
$beginMK = strtotime($beginDate);//开始日期的时间戳
$endMK = strtotime($endDate);//结束日期的时间戳
$daysTobegin = ceil(abs(($nowMk-$beginMK)/24/3600));//今天距开始日期的天数
$daysToend = ceil(abs(($endMK-$nowMk)/24/3600));//今天距结束日期的天数
$alldays = ceil(abs(($endMK-$beginMK)/24/3600));//总天数
return $daysTobegin."|".$daysToend."|".$alldays;
}
$showDays = countDate($_POST["beginDate"],$_POST["endDate"]);//每调用此函数一次,参数是post传进来的
$showDaysArr = explode("|",$showDays);
echo "总共有".$showDaysArr[2]."天<br>";
echo "今天离".$_POST["beginDate"]."还有:".$showDaysArr[0]."天<br>";
echo "今天离".$_POST["endDate"]."还有:".$showDaysArr[1]."天";
?>


其实楼主的需求也完全可以用JS实现,不经过服务器处理。有时间可以再交流下。

#14


谢谢楼上的大大们,问题刚才我已经解决了,分数还是给你们。