PHP strotime返回全年而不是一天

PHP strotime返回全年而不是一天,php,strtotime,Php,Strtotime,我目前正在使用PHPROUND,ABS,strotime来计算两个日期之间的差异 计算将一直进行,直到您从新的一年中选择一个$\u会话['b\u checkout']。i、 e.如果b_签入是12月30日,而b_签出是12月31日,则将正确的$no_nights返回为1天 $\u会话['b\u checkin']和$\u会话['b\u checkout']使用的是'D F jS Y'日期格式。e、 g $_SESSION['b_checkin'] = "Wednesday, 31 Decembe

我目前正在使用PHP
ROUND
ABS
strotime
来计算两个日期之间的差异

计算将一直进行,直到您从新的一年中选择一个
$\u会话['b\u checkout']
。i、 e.如果
b_签入
是12月30日,而
b_签出
是12月31日,则将正确的
$no_nights
返回为1天

$\u会话['b\u checkin']
$\u会话['b\u checkout']
使用的是
'D F jS Y'
日期格式。e、 g

$_SESSION['b_checkin'] = "Wednesday, 31 December, 2014"
$_SESSION['b_checkout'] = "Thursday, 1 January, 2015"

$no_nights = round(abs(strtotime($_SESSION['b_checkout']) - strtotime($_SESSION['b_checkin']))/(60*60*24));

目前,这将输出(
echo$no_nights
)363天,而不是1天。有什么问题吗?

使用以下格式进行签入和签出

// 'F jS Y'
$_SESSION['b_checkin'] = "31 December, 2014";
$_SESSION['b_checkout'] = "1 January, 2015";
希望这有帮助;)


干杯

删除所有逗号,看看它是否有效

$b_checkin = "Wednesday 31 December 2014";
$b_checkout = "Thursday 1 January 2015";

$no_nights = round(abs(strtotime($b_checkout) - strtotime($b_checkin))/(60*60*24));
echo $no_nights;

当php无法正确解释年份时,它会使用当前年份进行解析。这就是你得到363天的结果。

你的日期不是日期/时间字符串的有效格式。有效格式在[日期和时间格式]中解释(http://php.net/manual/en/datetime.formats.date.php)使用str_-replace如下所示,并且有效:$会话['b_-checkin']=str_-replace(',','',$会话['b_-checkin'])$_会话['b_checkout']=str_replace(',','',$会话['b_checkout']);