PHP默认时间为23:59:59

时间:2014-03-19 21:25:20

标签: php mysql wordpress

我正在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 );

2 个答案:

答案 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