我正在wordpress网站上运行抽奖页面。在创建抽奖活动帖子时,我已经有了逻辑设置,抽奖活动页面已根据“start_date”和“end_date”的自定义字段拉入帖子。我遇到的问题是如果抽奖活动设置为2014年3月1日开始并于2014年3月19日结束,一旦时间到达午夜(12:00),该帖子将在整个19日需要继续时被删除。以下是我正在使用的查询代码。它适用于具有开始日期和结束日期的自定义字段的帖子。在这种情况下,我几乎需要一个默认的帖子才能被删除03/19/2014时间23:59:59。我需要23:59:59的默认时间。是否有全局更改将在23:59:59指定的日期删除帖子?我希望这可以解释它。
<?php // The Query
$startdate = date('Y-m-d G:i:s');
$enddate = date('Y-m-d G:i:s');
$args = array(
'post_type' => 'page',
'orderby' => 'meta_value_num',
'order' => 'DESC',
'meta_query' => array(
array(
'key' => 'sweepstakes_startdate',
'value' => $startdate,
'compare' => '<='
),
array(
'key' => 'sweepstakes_enddate',
'value' => $enddate,
'compare' => '>='
)
)
);
$the_query = new WP_Query( $args );
答案 0 :(得分:2)
不,除了指定文字'23:59:59'
之外,没有真正的速记来指定它。
似乎最快的补丁只是在将$enddate
发送到您的查询之前重置$enddate
的一些PHP逻辑。
如果'2014-03-19 00:00:00'
的时间成分是午夜,则添加一天并减去一秒发送给查询的值。
这确实改变了规范;这意味着指定一个enddate值'2014-03-19 23:59:59'
等同于指定和结束00:00:01
的值,这基本上意味着它无法指定一个正好在午夜结束的抽奖活动。但是你可以在时间WHERE mydatetimecol >= '2014-03-19'
AND mydatetimecol < '2014-03-20'
结束抽奖活动。
在MySQL中,我们通常会指定&#34; end&#34;一段时间(就像你描述的那样)作为第二天的午夜(而不是前一天的&#39; 59:59&#39;)并使用&#34;小于&#34;比较而不是&#34;小于或等于&#34;比较。
例如:
WHERE mydatetimecol >= '2014-03-19'
AND mydatetimecol <= '2014-03-19 23:59:59'
而不是
WHERE mydatetimecol >= '2014-03-19'
AND mydatetimecol < '2014-03-19' + INTERVAL 1 DAY
MySQL确实对DATETIME值有一些方便的INTERVAL操作......
WHERE mydatetimecol >= '2014-03-19'
AND mydatetimecol <= '2014-03-19' + INTERVAL 1 DAY + INTERVAL -1 SECOND
如果我绝对不得不&#34;备份&#34;一秒钟,我使用间隔操作,例如:
{{1}}
请注意,某些时间值实际上可以具有毫秒精度,例如&#23; 59:59:59.997&#39;如果你使用了23:59:59&#39;那么你可能会在一个时期的结束和另一个时期的开始之间留下空隙。
这不是存储在MySQL中的临时数据类型的问题(但是其他RDMBS,例如SQL Server可以存储小数秒)。对于您的特定应用程序而言,它可能不是问题(但在更一般的情况下,我们通常希望行落入特定存储桶,而不是介于存储桶之间的裂缝之间。)
而且,我对将日期值增加86,399秒感到谨慎,这取决于时区是否为夏令时,有些日子是23小时或25小时。
答案 1 :(得分:0)
$start_scheduled_date = date("Y-m-d H:i:s", mktime(0,0,0));
$end_scheduled_date = date("Y-m-d H:i:s", mktime(23,59,59));
<强>输出:强>
2015-12-30 15:15:00
2015-12-31 00:00:00
2015-12-31 23:59:59