如何在Wordpress中获得一天的平均时间(小时)?

时间:2015-02-14 03:47:52

标签: php mysql wordpress date

我正在尝试构建一个页面(模板)来显示我的博客的“写作行为”。为了显示我在一天中最多发布的那个小时,我需要计算“一天的平均时间(小时)”,这样我就可以知道“呃我通常在早上发布博客......”

我想到的第一个想法是将所有“时间(小时)”加在一起,然后将它们除以“总帖子数”,然后转换为24小时格式显示,但似乎我的代码不起作用。< / p>

我写的核心代码是这样的:

<?php
$alltimes=$wpdb->get_var($wpdb->prepare("SELECT sum(post_date) FROM $wpdb->posts WHERE post_type = 'post'", $alltimes));
echo '<p>Total post count '.$published_posts.'</p>';
$count_posts = wp_count_posts(); $published_posts = $count_posts->publish;
$averagetime= $alltimes / $published_posts;
echo '<p>Average Time count is '.$averagetime.'</p>';
echo'<p>Average time is '.date('Y-m-d h:i:s',$averagetime).'</p>';
?>

我的错误是年,月,日,小时,秒......所有这些都归结为“$ alltimes”,所以当我划分它将成为一场灾难。

也许如果我能在“post_date”中获得“小时”,但不是整个“post_date”都可以完成这项工作,但如何?

感谢您的时间。

1 个答案:

答案 0 :(得分:2)

我认为你正在寻找这样的查询。我正在使用HOUR()DATE()从日期时间值中提取日期和小时部分:

SELECT HOUR(post_date) hour, COUNT(*) posts FROM wp_posts 
WHERE post_type = 'post' && DATE(post_date) = DATE(NOW()) 
GROUP BY hour
ORDER BY posts DESC;

这将显示在一天中的不同时段内发布了多少帖子,通知这只会返回post_date与当前日期匹配的行。如果您希望根据所有帖子获得最多时间,则只需删除DATE(post_date) = DATE(NOW())条件:

+------+-------+
| hour | posts |
+------+-------+
|   18 |    15 |
|   19 |    12 |
|   21 |     2 |
+------+-------+

如果您只想获得包含最多帖子数量的小时的单行,则可以使用:

SELECT hour, MAX(posts) posts FROM ( 
  SELECT HOUR(post_date) hour, COUNT(*) posts FROM wp_posts 
  WHERE post_type ='post' && DATE(post_date) = DATE(NOW()) 
  GROUP BY hour ORDER BY posts DESC 
) v;

或者像这样:

SELECT HOUR(post_date) hour, COUNT(*) posts FROM wp_posts 
WHERE post_type = 'post' && DATE(post_date) = DATE(NOW()) 
GROUP BY hour
ORDER BY posts DESC
LIMIT 1

<强>参考
Mysql - Date and Time Functions