【问题标题】:Time based PHP greetings基于时间的 PHP 问候语
【发布时间】:2014-07-09 23:50:08
【问题描述】:

我有一个简单的基于 PHP 时间的消息脚本(基于用户本地时间)。它没有像我想象的那样工作,不太确定是什么问题。

我基本上是在这些时间寻找这些消息:

  1. 凌晨 3 点 - 早上 6 点 - 消息 1
  2. 上午 6 点 - 下午 12 点 - 消息 2
  3. 12pm - 3pm - 消息 3
  4. 下午 3 点 - 下午 6 点 - 消息 4
  5. 下午 6 点 - 晚上 8 点 - 消息 5
  6. 晚上 8 点 - 晚上 10 点 - 消息 6
  7. 10pm -12am - 消息 7
  8. 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 &lt; 3) { echo "Message 3"; } elseif ($hour &gt; 3) { echo "Message 4"; } elseif ($hour &lt; 6) { echo "Message 4"; } elseif ($hour &gt; 6 { echo "Message 5"; } elseif ($hour &lt; 8 { echo "Message 5"; } }Thanks
  • PHP 是服务器端的,因此您必须询问用户他所在的时区。这可以保存在用户的帐户、会话或 cookie 中。无论哪种方式,时间等设置都将反映您服务器的设置,而不是客户端的设置。根据用户更改服务器的时区是个坏主意,因为它会破坏任何日志记录和其他与时间相关的功能

标签: php datetime time message


【解决方案1】:

您将要设置默认时区。这是直接来自 PHP 文档的方便脚本...

date_default_timezone_set('America/Los_Angeles');

$script_tz = date_default_timezone_get();

if (strcmp($script_tz, ini_get('date.timezone'))){
    echo 'Script timezone differs from ini-set timezone.';
} else {
    echo 'Script timezone and ini-set timezone match.';
}

所有支持的时区列表:http://www.php.net/manual/en/timezones.europe.php

如果我没记错的话,你只需要运行一次就可以设置时区。

【讨论】:

  • “……基于用户本地时间……” 但是 PHP 是一种基于服务器的语言。如果后端没有一些基本的地理位置或 JavaScript 做类似的事情,这是行不通的。
【解决方案2】:

试试这个(来自http://php.net/manual/en/function.date-default-timezone-set.php

<?php
    date_default_timezone_set('Europe/Brussels'); //added line
    $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!";
      }
    }

    ?> 

【讨论】:

  • “……基于用户本地时间……” 但是 PHP 是一种基于服务器的语言。如果后端没有一些基本的地理位置或 JavaScript 做类似的事情,这是行不通的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多