【发布时间】:2014-07-09 23:50:08
【问题描述】:
我有一个简单的基于 PHP 时间的消息脚本(基于用户本地时间)。它没有像我想象的那样工作,不太确定是什么问题。
我基本上是在这些时间寻找这些消息:
- 凌晨 3 点 - 早上 6 点 - 消息 1
- 上午 6 点 - 下午 12 点 - 消息 2
- 12pm - 3pm - 消息 3
- 下午 3 点 - 下午 6 点 - 消息 4
- 下午 6 点 - 晚上 8 点 - 消息 5
- 晚上 8 点 - 晚上 10 点 - 消息 6
- 10pm -12am - 消息 7
- 12am - 3am - 消息 8
我已经有了这个代码:
<?php
$b = time();
$hour = date("g", $b);
$m = date("A", $b);
if ($m == "AM") {
if ($hour == 12) {
echo "Good Evening!";
} elseif ($hour < 4) {
echo "Good Evening!";
} elseif ($hour > 3) {
echo "Good Morning!";
}
}
elseif ($m == "PM") {
if ($hour == 12) {
echo "Good Afternoon!";
} elseif ($hour < 6) {
echo "Good Afternoon!";
} elseif ($hour > 5) {
echo "Good Evening!";
}
}
?>
这没关系,但似乎比我预期的要早一个小时,我假设这是因为它正在读取 GMT,而英国目前处于 BST (GMT+1)。如果这不能解决,那不是问题,因为我可以相应地调整小时。但是,当我尝试添加需要消息的其他时间时,我得到了一些奇怪的结果。我是 PHP 新手,所以任何帮助都会很棒。
谢谢
【问题讨论】:
-
你得到了什么结果?
-
你想得到什么做什么?所有用户都应该获得英国时间吗?您的服务器时区配置正确吗?你看过localtime()吗?
-
based on the users local time,不会发生。您需要事先询问用户所在的时区,或者使用 javascript 完成所有这些操作。 -
它没有在正确的时间显示正确的消息。我尝试像这样添加额外的消息:
if ($hour == 12) { echo "Message 3"; } elseif ($hour < 3) { echo "Message 3"; } elseif ($hour > 3) { echo "Message 4"; } elseif ($hour < 6) { echo "Message 4"; } elseif ($hour > 6 { echo "Message 5"; } elseif ($hour < 8 { echo "Message 5"; } }Thanks -
PHP 是服务器端的,因此您必须询问用户他所在的时区。这可以保存在用户的帐户、会话或 cookie 中。无论哪种方式,时间等设置都将反映您服务器的设置,而不是客户端的设置。根据用户更改服务器的时区是个坏主意,因为它会破坏任何日志记录和其他与时间相关的功能