How can I obtain the local time in jQuery?

I am using jQuery and I need to get the local time for Germany.

Anyone coming to my website from any country should be able to know what time it is in Germany.

If the time is between 0:00 and 12:00 I need to make an alert reading: "Good Morning".

If the time is between 12:00 and 17:00 I need to make an alert reading: "Good Afternoon".

How can I implement this in jQuery?


You can get the local timezone offset of the client to get the GMT time and then add the offset hours of the Germany timezone (Central European Time GMT+1):

function getDate(offset){
  var now = new Date();
  var hour = 60*60*1000;
  var min = 60*1000;
  return new Date(now.getTime() + (now.getTimezoneOffset() * min) + (offset * hour));
}

//...

var dateCET = getDate(1); // Central European Time is GMT +1

if (dateCET.getHours() < 12) {
    alert ("Good morning.");
} else {
    alert ("Good afternoon.");
}

Update: I agree with @Josh, the above code is completely client dependent. Let's try to do it better:

$(document).ready(function(){
  var timezone = "Europe/Berlin";
  $.getJSON("http://json-time.appspot.com/time.json?tz="+timezone+"&callback=?",
    function(data){
      if (data.hour < 12) {
        alert ("Good morning in "+timezone);
      } else {
        alert ("Good afternoon in "+timezone);
      }
    })
});

We are now taking advantage of JSONP to do Cross-Domain requests to the jsontime server, this server exposes a complete JSON API to query time and timezone information.

You can play with the code here and you can explore the JSONP API here.

Hurray!, no server-side code!


Do you want to get the time in Germany, or the time for the user's timezone, wherever they are? If the latter, the Date() function defaults to work in the local timezone.

var d = new Date();    // defaults to the current time in the current timezone
if (d.getHours() < 12) {
    alert ("Good morning.");
} else {
    alert ("Good afternoon.");
}