PHP Time Of Day

Discussion in 'Web Design and Development' started by jacob.3336, Oct 22, 2012.

  1. macrumors newbie

    Joined:
    Jul 25, 2012
    #1
    I am making a web application.

    One thing is needs to do is get the time of day
    so it can say for example in the evening:

    "Good Evening, User"

    I have tried an if statement:

    PHP:
    function timeofday(){

    if (
    $Time <= "5:00 PM") {
    return 
    "Evening";
    }else{

    if (
    $Time <= "12:00 PM") {
    return 
    "Afternoon";
    }else{

    if (
    $Time <= "5:00 AM") {
    return 
    "Morning";
    }
    }
    }
    It doesn't work.
    Does anybody know how I could make it work.
     
  2. macrumors 68030

    Darth.Titan

    Joined:
    Oct 31, 2007
    #2
    • You're not setting a value for $time.
    • You're using comparison operators on string values. i.e. "5:00 PM" is a string value.

    Think 24-hour clock time:
    PHP:
    function timeofday(){ 
        
    $time date('G');
        
        if (
    $time 12) { 
            return 
    "Morning"
        }
        elseif (
    $time >= 12 && $time 17) { 
            return 
    "Afternoon"
        }
        else{ 
            return 
    "Evening"
        } 
    }
    Info on PHP's built in date() function. Bear in mind that date() will reflect the time on the server where your site is hosted, not necessarily the same as your visitors' local times. Getting the visitors' local time will require either asking them to enter their timezone, or obtaining it through javascript.

    Also your if/else reasoning seemed overcomplicated, so I went with if, elseif, else instead.
     
  3. macrumors 68000

    SrWebDeveloper

    Joined:
    Dec 7, 2007
    Location:
    Alexandria, VA, USA
    #3
    For client side Javascript (local browser time):

    Code:
    <script type="text/javascript">
    var d = new Date()
    var time = d.getHours()
    if (time<10)
      {
      document.write("<b>Good morning</b>");
      }
    else if (time>10 && time<16)
      {
      document.write("<b>Good afternoon</b>");
      }
    else
      {
      document.write("<b>Good evening</b>");
      }
    </script>
    Couple of additional thoughts to the OP, with all due respect to Darth.Titan who responded perfectly:

    Please note that some users have no control over their current time zone, so none of these things are fool proof. But the JS method, being client side, is certainly the way to go unless you know all your users are from one centralized time zone location where you can adjust based on the offset in the PHP code.

    If this really matters to you consider allowing users to select their time zone offset from GMT either in a preference pane or during login, saved to their account. Then you use the PHP method with that offset being calculated, no reliance on Javascript and very accurate time control as it's server based.
     
  4. Moshu, Nov 8, 2012
    Last edited: Nov 8, 2012

    macrumors member

    Joined:
    May 3, 2012
    #4
    Browsing the forums, couldn't help notice a small bug in your code: when 10 AM, the script will display: "Good evening" :D

    Replace with

    else if (time>=10 && time<16)

    The tip to use JavaScript due to TimeZones is a very good one.

    I would also add that personally, I prefer to offload as much work as possible to the browsers (by JavaScript), in order to reduce server load (PHP). Consider how many people are using your website in the same time, when choosing to code certain processes in JavaScript or PHP.

    Obviously, this is not the case with this script, but nevertheless, I consider it an important thing to keep in mind when building a website.

    Cheers!
     
  5. macrumors 68000

    SrWebDeveloper

    Joined:
    Dec 7, 2007
    Location:
    Alexandria, VA, USA
    #5
    Thanks for the fix, it was not intended to be a copy/paste of code for the OP, just an untested example and I should have said so. As to your other comments, just a small note to add. As sites become more dynamic and complex and Unix timestamps are stored along with offsets into databases used for online calendars, events, forum postings like this, etc., server side processing is intensive anyway. Client side date stuff can also be generated and seeded by PHP in such situations and is an effective method. Otherwise I agree entirely with what you said about client side in general.
     
  6. macrumors newbie

    Joined:
    Jun 8, 2013
    #6
    Is it possible to make this work with minutes as well?

    PHP:
    $hour date('G'); 
    $min date('i'); 

    if (
    $hour 9) {  
            echo 
    "Shouldn't you be asleep? Yeah, we thought so. ";  
        } 
      elseif (
    $hour == && $min 30) {  
            echo 
    "Rise and shine! Get out of bed!";  
        }
      elseif (
    $hour == && $min 30) {  
            echo 
    "You should be headed to breakfast now.";  
        } 
    Is that wrong?
     
  7. macrumors newbie

    Joined:
    Jun 13, 2013
    #7
    To disply time of the day function you need use time() function.
    And compaire that time with your variable if it matches then show the msg.
     
  8. macrumors newbie

    Joined:
    Aug 29, 2013
    #8
    function timeofday(){
    $time = date('G');

    if ($time < 12) {
    return "Morning";
    }
    elseif ($time >= 12 && $time < 17) {
    return "Afternoon";
    }
    else{
    return "Evening";
    }
    }

    you have not used the function date that's why it was not working.
     
  9. macrumors 65816

    Joined:
    Apr 17, 2012
    Location:
    Destin, FL
    #9
    Just for obnoxious completeness:

    You can use php functions date_sunrise() and date_sunset() to get more accurate good mornings, good afternoons and good evenings if you wish.

    I use javascript to get local time and use that to build the rest.

    Critiques if I may( none of this is important, just 'traditional' styling ):
    1) variables traditionally start with a small letter
    2) all functions should have only one return
    3) function names typically are camelCase or underscore_delimited
     
  10. macrumors newbie

    Joined:
    Oct 4, 2013
    #10
    function timeofday(){
    $time = date('G');

    if ($time < 12) {
    return "Morning";
    }
    elseif ($time >= 12 && $time < 17) {
    return "Afternoon";
    }
    else{
    return "Evening";
    }
    }
     
  11. macrumors 6502a

    ohbrilliance

    Joined:
    May 15, 2007
    Location:
    Melbourne, Australia
    #11
    I disagree with this advice. I find it vastly preferable to make quick exits from functions rather than add superfluous boolean or control flow statements.

    As a simple example, compare these two for clarity. With multiple return statements:

    Code:
    function getTransactionsForUser($userId='')
    {
       if (!$userId) {
          return false;
       }
    
       if (!($user = getUserForId($userId)) {
          return false;
       }
    
       // Here we do lots of stuff to gather transactions for the given user
    
       return $transactions;
    }
    
    
    With a single return statement:

    Code:
    function getTransactionsForUser($userId='')
    {
       $transactions = false;
    
       if ($userId) {
          if ($user = getUserForId($userId) {
             // Here we do lots of stuff to gather transactions for the given user
             return $transactions;
          }
       }
    
       return $transactions;
    }
    
    The latter approach can quickly become a mess of nested if-else statements as the number of checks increases, and especially if the actions to take on negative conditions are more diverse than returning an empty array.
     
  12. macrumors 65816

    Joined:
    Apr 17, 2012
    Location:
    Destin, FL
    #12
    You and everyone else without significant experience in refactoring or maintaing code, but this has been a balanced argument for decades. Both with good points. So I agree with your disagreement.

    Full disclosure: I use negation in conditionals and multiple returns every day. I only wrote what we should aspire to do ( single returns ). I'm currently refactoring code written just under a year ago by what I can only imagine was 3rd grade chipmonks. Why oh why! But I love my job. I make things pretty and easier to maintain.

    PS. Both of your examples are common in first round draft code: negation in conditionals generally signifies poorly structured code ( probably due to lack of UML or prototyping ). Double return in second example. I could go on, but I have my broken code to fix.
     
  13. macrumors 6502a

    ohbrilliance

    Joined:
    May 15, 2007
    Location:
    Melbourne, Australia
    #13
    Please do take the time to recode the two examples. I am genuinely interested in seeing how you would approach the problem in the most maintainable way.
     
  14. macrumors newbie

    Joined:
    Apr 16, 2013
    #14
    Use Function

    function timeofday(){
    $time = date('G');

    if ($time < 12) {
    return "Morning";
    }
    elseif ($time >= 12 && $time < 17) {
    return "Afternoon";
    }
    else{
    return "Evening";
    }
    }

    Try this and get result.
     
  15. macrumors 68000

    SrWebDeveloper

    Joined:
    Dec 7, 2007
    Location:
    Alexandria, VA, USA
    #15
    This is *exactly* the same solution posed by another user in reply #10 previous to this one. :(
     

Share This Page