我有一个网站,允许访问者查看内容,并可以选择注册和登录(这使他们有权提交内容)。
每当用户提交内容时,我在INSERT INTO
表中执行content
查询,我使用UNIX_TIMESTAMP()
将时间戳存储在content_timestamp
列中(这是提交内容的时间。)
我还允许用户从usercp中的下拉菜单中选择一个时区(支持来自http://php.net/manual/en/timezones.php
的所有时区) - 以及{{1}中的一列(user_timezone
) } table得到users
'd,所以所有显示的日期都调整为(如果选择)。
显示内容的页面之一我显示格式化日期(提交内容的时间) - 如果他们没有登录或登录而没有选择时区(在usercp中)我格式化它在GMT,否则我在那里使用选定的时区,例如:
UPDATE
现在一切都很好,但现在我打算每周和每月安排一个cronjob(这将是每周精选和每月精选内容),这将访问一个将执行<?php
if (!is_logged_in() || is_logged_in() && empty($row['user_timezone'])) {
echo gmdate('d/m/y', $row['content_timestamp']) . ' GMT'; //in GMT
} else {
date_default_timezone_set($row['user_timezone']);
echo date('d/m/y', $row['content_timestamp']); //use the users timezone
}
?>
查询的php文件(评分最高的内容)并将其添加到INSERT INTO
表格 - 以及添加时的featured
(UNIX_TIMESTAMP()
- 。)
cronjob设置为每周第一天上午12点(格林尼治标准时间午夜)和每个月的第一天(格林威治标准时间午夜12点)访问php文件。
......现在遇到问题:
我通过使用featured_timestamp
日期和时间函数比较时间戳来显示精选内容(例如下面的示例将返回每周特色内容):
MySQL
这会导致任何时区冲突/问题,因为cronjob正在访问GMT中的文件而我不知道时区使用SELECT * FROM featured WHERE WEEK(FROM_UNIXTIME(featured_timestamp), 1) = WEEK(UNIX_TIMESTAMP(), 1) AND
FROM_UNIXTIME(featured_timestamp, '%Y %M') = FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y %M')
MySQL
和WEEK()
(只是好奇,因为这意味着像上面这样的比较查询会产生不正确的结果)?