Php从现在到日期之间的天数
我通过post将预订信息从php发送到javascript。使用Php从现在到日期之间的天数,php,Php,我通过post将预订信息从php发送到javascript。使用floor($eventTime/(60*60*24))-floor(time()/(60*60*24))我根据事件发生的日期告诉javascript代码将事件放在何处$eventTime是unix时间戳。E.x.21日的任何日期都应该放在方框1中,22日的任何一天都应该放在方框2中,等等。我做错了什么?以小时为单位的时间会影响预订显示在哪一天,19日和20日的活动是混合的,等等,但我使用的楼层是以天为单位的,所以我不明白。要明确的
floor($eventTime/(60*60*24))-floor(time()/(60*60*24))代码>我根据事件发生的日期告诉javascript代码将事件放在何处$eventTime
是unix时间戳。E.x.21日的任何日期都应该放在方框1中,22日的任何一天都应该放在方框2中,等等。我做错了什么?以小时为单位的时间会影响预订显示在哪一天,19日和20日的活动是混合的,等等,但我使用的楼层是以天为单位的,所以我不明白。要明确的是,我想要从现在到另一个日期的天数,但不包括或考虑小时/分钟。因此,如果今天是10号,那么10号的任何预订无论在什么时间(00:00:00-23:59:59)都应该将其“timeFrom”变量表示为0。在本例中,10号和11号的日期都将0作为“days between”变量发送,此时10号应为0,11号应为1
下面是相关的php
while ($appResult = $stmt->fetch(PDO::FETCH_ASSOC))
{
$tz = new DateTimeZone('America/Chicago'); // maybe this comes from the client side
$now = new DateTime('now', $tz);
$eventTime = new DateTime($appResult["time"], $tz);
$now->setTime(0, 0);
$eventTime->setTime(0, 0);
$diff = $now->diff($eventTime);
$days = $diff->d;
$postString .= $days;
$postString .= ".";
$postString .= $appResult['id'];
$postString .= ".";
$postString .= date("H.i",strtotime($appResult['time']));
$postString .= ".";
$postString .= $appResult['members'];
$postString .= ".";
$postString .= $appResult['admin'];
$postString .= ".";
$postString .= $appResult['message'];
$postString .= ".";
$postString .= $appResult['tools'];
$postString .= ".";
$postString .= $appResult['location'];
$postString .= ".";
$postString .= $appResult['time'];
$postString .= ".";
$postString .= $appResult['userCount'];
$postString .= ".";
$postString .= $appResult['class'];
$postString .= "!";
}
以及相关的jquery
function(data)
{
$(".eventContainers > div:not(.eventHeaders) ").children().remove();
var dateDays = data.split("@")[0].split(",");
var appointments = data.split("@")[1].split("!")
var resultsContainer = $(".eventHeaders");
for(var i = 0; i < 5; i++)
{
$(resultsContainer[i]).find(".eventDay").text(dateDays[i].split(".")[0]);
$(resultsContainer[i]).find(".eventWeek").text(dateDays[i].split(".")[1]);
}
for(var i = 0; i < $(appointments).size() - 1; i++)
{
var inEvent = false;
for(var j = 0; j < $(appointments[i].split(".")[4].split(",")).size(); j++)
{
if(appointments[i].split(".")[4].split(",")[j] == id)
inEvent = true;
}
var appendString = "";
var parentStyle;
var buttonStyle;
var clicked;
var style = ['style="background-image:url(\'appAdd.png\')"','style="background-color:rgba(0,0,0,0.15)"','style="background-image:\\\'\\\'"','style="background-color:rgba(0,0,0,0.3)"'];
if(inEvent)
{
clicked = "true";
parentStyle = style[1];
buttonStyle = style[0];
}
else
{
clicked = "false";
parentStyle = style[3];
buttonStyle = style[2];
}
appendString += "<div id='" + appointments[i].split(".")[1] + "' class='appointmentIndivContainer' " + parentStyle + "><div class='appointmentJoinButton' " + buttonStyle + "></div><p class='appointmentTime'>" + getTime(appointments[i].split(".")[2], appointments[i].split(".")[3]) + "</p><p class='appointmentLocation'>" + appointments[i].split(".")[8].replace(/\+/g, ' ') + "</p> <p class='dataContainers admin'>" + appointments[i].split(".")[5] + "</p> <p class='dataContainers message'>" + appointments[i].split(".")[6].replace(/\+/g, ' ') + "</p> <p class='dataContainers tools'>" + appointments[i].split(".")[7].replace(/\+/g, ' ') + "</p> <p class='dataContainers userCount'>" + appointments[i].split(".")[9] + "</p><p class='dataContainers class'>" + appointments[i].split(".")[10] + "</p><p class='dataContainers clicked'>" + clicked + "</p><p class='dataContainers members'>" + appointments[i].split(".")[4].replace(/,/g, ', ') + "</p><p class='dataContainers daysFrom'>" + appointments[i].split(".")[0] + "</p></div>";
switch (appointments[i].split(".")[0])
{
case "0":
$("#dayOneEvents").append(appendString);
break;
case "1":
$("#dayTwoEvents").append(appendString);
break;
case "2":
$("#dayThreeEvents").append(appendString);
break;
case "3":
$("#dayFourEvents").append(appendString);
break;
case "4":
$("#dayFiveEvents").append(appendString);
break;
}
}
});
功能(数据)
{
$(“.eventContainers>div:not(.eventHeaders)”).children().remove();
var dateDays=data.split(“@”)[0]。split(“,”;
var约会=数据。拆分(“@”)[1]。拆分(!”)
var resultcontainer=$(“.eventHeaders”);
对于(变量i=0;i<5;i++)
{
$(resultContainer[i]).find(“.eventDay”).text(dateDays[i].split(“.”[0]);
$(resultContainer[i]).find(“.eventWeek”).text(dateDays[i].split(“.”[1]);
}
对于(变量i=0;i<$(约会).size()-1;i++)
{
var inEvent=假;
对于(var j=0;j<$(约会[i]。拆分(“.”[4]。拆分(“,”))。大小();j++)
{
如果(约会[i]。拆分(“.”[4]。拆分(“,”[j]==id)
inEvent=真;
}
var appendString=“”;
var-parentStyle;
var buttonStyle;
var单击;
var style=['style=“background image:url(\'appAdd.png\”)”,'style=“background color:rgba(0,0,0,0.15)”,'style=“background image:\\\'\\\'”,'style=“background color:rgba(0,0,0,0.3)”;
如果(无事件)
{
单击=“真”;
parentStyle=style[1];
按钮样式=样式[0];
}
其他的
{
单击“假”;
parentStyle=style[3];
按钮样式=样式[2];
}
appendString+=“”+getTime(约会[i]。拆分(“.”[2],约会[i]。拆分(“.”[3])+”
“+约会[i]。拆分(“.”[8]。替换(/\+/g)”)+“
+Appoints[i]。拆分(“[5]+”
[i] .split(“.”[6]。替换(/\+/g”,)+“
”+appointment[i]。拆分(“.”[7]。替换(/\+/g,)+”
“+appointment[i]。拆分(“.”[9]+”
+appointment[i]。拆分(“.”[10]+“
]“
”+约会[i]。拆分(“.”[4]。替换(/,/g,”)+”
”+约会[i]。拆分(“.”[0]+”
”;
切换(约会[i]。拆分(“.”[0])
{
案例“0”:
$(“#dayOneEvents”).append(appendString);
打破
案例“1”:
$(“#daytowevents”).append(appendString);
打破
案例“2”:
$(“#daytreeevents”).append(appendString);
打破
案例“3”:
$(“#dayFourEvents”).append(appendString);
打破
案例“4”:
$(“#dayFiveEvents”).append(appendString);
打破
}
}
});
}获取时间差(以天为单位)的最简单方法是使用
当然,这只能得到两个日期/时间之间的实际天数。对象中还有大量其他与时间间隔相关的信息($diff
),例如
更新
要使用每个日期的开始日期,请在调用diff()
之前使用此选项
$now->setTime(0, 0);
$eventTime->setTime(0, 0);
$diff = $now->diff($eventTime);
$days = $diff->d;
注意:如果您的日期间隔超过夏令时阈值,您可能仍然会遇到问题。更准确地说,在进行除法和地板()之前,您应该先休息一下。
问题可能是楼层功能所做的调整。我会这样做:
floor(($eventTime-time())/(60*60*24))
您可以使用strotime函数获取任何日期的时间戳,如下所示
$current_time = strtotime(date('d-m-Y g:i:s A')); // timestamp of current date/time
$your_last_date = "10-Jan-2014";
$last_time = strtotime($your_last_date);
//subtract them
$sub_time = $current_time - $last_time;
// divide by timestamp of 1 day which is 60*60*24 = 86400;
// you will get the days
$days = floor($sub_time/86400); // no of days between previous date and now
需要更多信息。错误结果的例子是什么?我编辑过。没有任何方法可以包含更多信息。这会告诉我时间和分钟,还是2014-10-10 10:10:10和2014-10-11 10:10:10:10之间的差异与2014-10-10:10:10和2014-10-11 00:00之间的差异相同?@CraigPatrickLafferty您可以从$diff
对象中获得更多信息。请查看我的更新答案我需要今天00:00:00和预订日00:00:00之间的天数差。请查看我对HectorIP答案的评论。@CraigPatrickLafferty您能用代码示例编辑您的问题吗?如果我这样做,今天的时间是晚上10点,我会根据预订日期是在晚上10点之前还是之后得到不同的数字。我需要一个只取决于日期的数字,而不是时间。我不想要两天之间的天数。我给出了一个遵循我想使用的逻辑的代码示例。我只想知道为什么它不起作用。我想知道e从今天开始的天数。
floor(($eventTime-time())/(60*60*24))
$current_time = strtotime(date('d-m-Y g:i:s A')); // timestamp of current date/time
$your_last_date = "10-Jan-2014";
$last_time = strtotime($your_last_date);
//subtract them
$sub_time = $current_time - $last_time;
// divide by timestamp of 1 day which is 60*60*24 = 86400;
// you will get the days
$days = floor($sub_time/86400); // no of days between previous date and now