在我的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;
}
Run Code Online (Sandbox Code Playgroud)
新代码:
# Offset to "end of day"
list($y,$m,$d) = explode('-',date("Y-m-d",strtotime($_POST['dateto'])));
$d++;
$dateto = strtotime($y . '-' . $m . '-' . $d) - 1;
Run Code Online (Sandbox Code Playgroud) PHP手册指出time()返回 "当前的UNIX时间戳" ᴀ 并microtime()返回 "当前Unix时间戳和微秒" ʙ.
但是,这些功能是否保证与严格符合POSIX.1系统的功能相同?
具体来说,以time() | 的输出方式插入闰秒 在第二天开始时向后microtime() 跳1秒(也就是在闰秒结束时),在下一个第一秒的整个过程中给我们重复的返回值 - 与新鲜的唯一值相对天?
例如,如果我们轮询time() | microtime()在1998 -12-31和1999 -01 -01的整个范围内,每微秒,在915 148 800 <= x <915 148 801范围内,每个值是否会出现两次?