PHP“;截止日期x“为什么最后一天的24小时不包括在期间内?
我在其中一个房间里倒计时。因为这是我的第一次倒计时,我才意识到如果我告诉PHP: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日之前的租
$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我已经澄清了我的意思,不要误解我的意思,当然可以使用内置的日期方法,但是,我经常想不止一次地使用日期,每次都要手动计算它们是重复的,而且容易出错,这是一个很好的答案。我的意思只是为了用“更好的”