您的计算机时间和服务器时间可能不完全同步。因此,您可能会看到一些伪问题。
我不知道你在哪里看到“1分钟前发布”或类似的东西,在后端。我看到了“发布日期”和“上次编辑”日期,但这些是“硬”日期,而不是相对于StackExchange显示问答日期的“现在”日期。
我可不想那样查日期。数据库中的日期格式为0000-00-00 00:00:00
. 这就是“年、月、日、时、分、秒”。你把它比作0000-00-00
. 大多数情况下,这可能是可行的,但可能存在一些边缘情况,接受这种可能性是不必要的。未经测试,但我怀疑你收到的帖子可能不是24小时前的,而是“昨天的第二个0”。由于您没有通过时间部分,我怀疑如果您检查“2013-04-20”减去一天,您将获得从“2013-04-20 00:00:00”开始的所有内容,并且仅在最后24小时内完成。我很确定这就是为什么你看了37个小时。如果你测试,我预计时差会改变,但你永远不会看到超过48小时。
WordPress使用datetime
设置这些日期列的格式,MySQL可以do its own date calculations. 您有许多我认为更可靠的查询选择。
将MySQL格式post\\u date转换为UNIXTIME。
$where .= " AND UNIX_TIMESTAMP(post_date) > \'" . strtotime(\'-1440 minutes\') . "\'";
转换返回的UNIXTIME值
strtotime
到MySQL格式
$where .= " AND post_date > FROM_UNIXTIME(\'.strtotime(\'-1440 minutes\').\')";
让MySQL来完成整个任务。
$where .= " AND post_date > DATE_SUB(CURDATE(), INTERVAL 1 day) ";
此选项意味着MySQL服务器的日期必须与HTTP服务器的日期匹配到可接受的精度。如果服务器位于不同的机器上,而您无法直接控制这两台机器,那么这可能是一个问题。
当然,您可以向MySQL提供一个完全格式化的日期。
$where .= " AND post_date > \'" . date(\'Y-m-d H:i:s\',strtotime(\'-1440 minutes\')) . "\'";
但您正在手动执行MySQL可以为您执行的操作,这让我觉得有些不太可靠。