Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP“;截止日期x“为什么最后一天的24小时不包括在期间内?_Php_Days - Fatal编程技术网

PHP“;截止日期x“为什么最后一天的24小时不包括在期间内?

PHP“;截止日期x“为什么最后一天的24小时不包括在期间内?,php,days,Php,Days,我在其中一个房间里倒计时。因为这是我的第一次倒计时,我才意识到如果我告诉PHP: $timeleft = strtotime('2013-10-31') - strtotime('now'); $daysleft = floor( $timeleft/(24*60*60) ); 我剩下的时间是2013-10-31 00:00,而不是一整天 为什么是这样?我期望2013-10-31 23:59:59或2013-11-01 00:00 日常生活中的一个例子是:我有一份2013年10月31日之前的租

我在其中一个房间里倒计时。因为这是我的第一次倒计时,我才意识到如果我告诉PHP:

$timeleft = strtotime('2013-10-31') - strtotime('now');
$daysleft = floor( $timeleft/(24*60*60) );
我剩下的时间是2013-10-31 00:00,而不是一整天

为什么是这样?我期望
2013-10-31 23:59:59
2013-11-01 00:00

日常生活中的一个例子是:我有一份2013年10月31日之前的租车合同,或者任何合同,然后我知道租车期总是包括最后一天

这似乎是一个初学者的问题,但我想知道这个决定的原因。谢谢你的想法和经验



PS:在所有编程语言中都是一样的吗?

然后给
strotime
一点时间

$timeleft = strtotime('2013-10-31 23:59:59') - strtotime('now');
为什么?

因为当你说:

strtotime('2013-10-31');
这意味着该日期开始的确切时间戳,相当于说:

strtotime('2013-10-31 00:00:00');  // hence the missing 24 hours
编辑

事实上,说
strotime('now')
就像说
time()
,所以您也可以删除它。让它像:

$timeleft = strtotime('2013-10-31 23:59:59') - time();
PS:在所有编程语言中都是一样的吗


这不是一种语言限制,无论以何种方式,任何语言。这就是你如何解释为你创造时间的函数。正确解释后,将正确的值发送给它,它将按照您的预期工作。

然后给它一个时间来执行strotime

$timeleft = strtotime('2013-10-31 23:59:59') - strtotime('now');
为什么?

因为当你说:

strtotime('2013-10-31');
这意味着该日期开始的确切时间戳,相当于说:

strtotime('2013-10-31 00:00:00');  // hence the missing 24 hours
编辑

事实上,说
strotime('now')
就像说
time()
,所以您也可以删除它。让它像:

$timeleft = strtotime('2013-10-31 23:59:59') - time();
PS:在所有编程语言中都是一样的吗


这不是一种语言限制,无论以何种方式,任何语言。这就是你如何解释为你创造时间的函数。正确解释后,将正确的值发送给它,它将按照您的预期工作。

原因与金钱相同: 1欧元=1.00欧元,而不是1.50欧元


如果一天中的时间很重要,您应该在两个对象中定义它。

这样做的原因与金钱的原因相同: 1欧元=1.00欧元,而不是1.50欧元


如果一天中的时间很重要,您应该在两个对象中都定义它。

由于日期可能不明确,随时区、夏令时而变化-甚至是运行它的系统的体系结构,建议使用内置的
DateTime
对象

有许多方法可以用来操作日期,例如
DateTime::diff()
,无需所有手动计算(即
floor($timeleft/(24*60*60));

因此,在比较日期间隔和/或将它们相加时,它们可能会为您提供更好的灵活性和准确性

$date = new DateTime('2013-10-31');
$now  = new DateTime('today');
$diff = $date->diff($now);
$new  = $date->add($diff);

echo $new->format('Y-m-d H:i'); // 2013-11-01 00:00

由于日期可能模棱两可,随时区、夏令时(甚至其运行的系统的体系结构)而变化,因此建议使用内置的
DateTime
对象

有许多方法可以用来操作日期,例如
DateTime::diff()
,无需所有手动计算(即
floor($timeleft/(24*60*60));

因此,在比较日期间隔和/或将它们相加时,它们可能会为您提供更好的灵活性和准确性

$date = new DateTime('2013-10-31');
$now  = new DateTime('today');
$diff = $date->diff($now);
$new  = $date->add($diff);

echo $new->format('Y-m-d H:i'); // 2013-11-01 00:00

是否有其他方式说明包括24小时在内的最后一天?现在我使用的是strotime('2013-10-31+1天')-strotime('now')+1天也可以,因为第二天的开始将等于这一天的结束。您还可以使用一个注释说明为什么我没有使用
time()
,我指定
date\u default\u timezone\u set('Europe/Vilnius')以接收正确的本地时间。使用
time()
我会得到不一样的UTC:)是否有其他方法来说明包括24小时在内的最后一天?现在我使用的是strotime('2013-10-31+1天')-strotime('now')+1天也可以,因为第二天的开始将等于这一天的结束。您还可以使用一个注释说明为什么我没有使用
time()
,我指定
date\u default\u timezone\u set('Europe/Vilnius')以接收正确的本地时间。使用
time()
我会得到不同的UTC:)这
$timeleft=strotime('2013-10-31 23:59:59')-time()更干净吗@Hanky웃Panky我已经澄清了我的意思,不要误解我的意思,当然可以使用内置的日期方法,但是,我经常想不止一次地使用日期,每次都要手动计算它们是重复的,而且容易出错,这是一个很好的答案。我的意思是“点”,因此“清洁剂”一词被替换为“更好的”
,这比“时间”更清洁($timeleft=strotime('2013-10-31 23:59:59')-time()如何@Hanky웃Panky我已经澄清了我的意思,不要误解我的意思,当然可以使用内置的日期方法,但是,我经常想不止一次地使用日期,每次都要手动计算它们是重复的,而且容易出错,这是一个很好的答案。我的意思只是为了用“更好的”