PHP Time Of Day

jacob.3336

macrumors newbie
Original poster
Jul 25, 2012
5
0
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.
 

Darth.Titan

macrumors 68030
Oct 31, 2007
2,727
418
Austin, TX
  • 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.
 

SrWebDeveloper

macrumors 68000
Dec 7, 2007
1,872
2
Alexandria, VA, USA
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.
 

Moshu

macrumors member
May 3, 2012
74
90
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>
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!
 
Last edited:

SrWebDeveloper

macrumors 68000
Dec 7, 2007
1,872
2
Alexandria, VA, USA
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.
 

imzac

macrumors newbie
Jun 8, 2013
1
0
  • 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"; 
	} 
}
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 == 9 && $min < 30) {  
        echo "Rise and shine! Get out of bed!";  
    }
  elseif ($hour == 9 && $min > 30) {  
        echo "You should be headed to breakfast now.";  
    }
Is that wrong?
 

johnmacd

macrumors newbie
Jun 13, 2013
6
0
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.
 

geekrew

macrumors newbie
Aug 29, 2013
5
0
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.
 

960design

macrumors 68030
Apr 17, 2012
2,918
890
Destin, FL
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
 

trenthanover

macrumors newbie
Oct 4, 2013
29
0
function timeofday(){
$time = date('G');

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

ohbrilliance

macrumors 6502a
May 15, 2007
940
214
Melbourne, Australia
2) all functions should have only one return
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.
 

960design

macrumors 68030
Apr 17, 2012
2,918
890
Destin, FL
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.
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.
 

ohbrilliance

macrumors 6502a
May 15, 2007
940
214
Melbourne, Australia
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.
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.
 

markmiller988

macrumors newbie
Apr 16, 2013
3
0
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.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.