在我的Web应用程序中,我让用户在一个简单的文本框中输入日期。该输入(当然是经过清理的)是通过strtotime()运行的,并将86399添加到其中,以使该时间戳记在一天中结束时(11:59:59)。这是出于到期日的目的(因此,如果日期过去了,则应用程序将引发一个标志)

在我测试的日子里,它奏效了...

1月5日在一天结束时保存为1月5日。

3月13日另存为3月13日

3月15日另存为3月15日

3月14日,无论出于何种原因,都将自己保存为3月15日。

3月14日神秘地短了几秒钟吗?

更新:感谢oezi提供的解决方案-像一个魅力。要求的代码:

旧代码:

if ($_POST['dateto'] != '') {
    $dateto = strtotime(mysql_real_escape_string($_POST['dateto'])) + 86399;
}

新代码:
# Offset to "end of day"
list($y,$m,$d) = explode('-',date("Y-m-d",strtotime($_POST['dateto'])));
$d++;
$dateto = strtotime($y . '-' . $m . '-' . $d) - 1;

最佳答案

就像其他人所说的,这是因为夏时制。要解决此问题,您可以执行以下操作:

<?php
list($y,$m,$d) = explode('-',date("Y-m-d",strtotime($date_from_user)));
$h = 23;
$i = 59;
$s = 59;
$mytimestamp = "$y-$m-$d $h:$i:$s";
?>

关于php - 3月14日不是86400秒长?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2411564/

10-13 00:46