Jak Mogę uzyskać czas lokalny w jQuery?

Używam jQuery i potrzebuję czasu lokalnego dla Niemiec.

Każdy odwiedzający moją stronę z dowolnego kraju powinien wiedzieć, która jest godzina w Niemczech.

Jeśli czas jest między 0:00 a 12: 00 muszę zrobić alert czytania: "dzień dobry".

Jeśli czas jest między 12:00 a 17: 00 muszę zrobić Alert czytania: "dzień dobry".

Jak zaimplementować to w jQuery?

Author: GEOCHET, 2009-03-19

3 answers

Możesz uzyskać lokalne przesunięcie strefy czasowej klienta, aby uzyskać Czas GMT, a następnie dodać przesunięcie godzin strefy czasowej Niemiec (Czas środkowoeuropejski 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: zgadzam się z @ Josh, powyższy kod jest całkowicie zależny od klienta. Spróbujmy zrobić to lepiej:

$(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);
      }
    })
});

Korzystamy teraz z JSONP do wykonywania żądań między domenami do serwera jsontime , Ten serwer udostępnia kompletne API JSON do zapytań o czas i strefę czasową informacje.

Możesz grać z kodem tutaj i możesz przeglądać JSONP API tutaj .

Hurra!, brak kodu po stronie serwera!
 24
Author: CMS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-31 04:45:30

Czy chcesz uzyskać czas w Niemczech, lub czas dla strefy czasowej użytkownika, gdziekolwiek są? Jeśli to ostatnie, funkcja Date() domyślnie działa w lokalnej strefie czasowej.

var d = new Date();    // defaults to the current time in the current timezone
if (d.getHours() < 12) {
    alert ("Good morning.");
} else {
    alert ("Good afternoon.");
}
 6
Author: nickf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-19 03:22:54

Musisz wprowadzić datę / czas z serwera www do ukrytego pola na stronie, a następnie możesz uzyskać do niego dostęp za pomocą jQuery i załadować naturalny obiekt Javascript Date . Nie chcesz polegać na dacie/czasie po stronie klienta, ponieważ jest on poza Twoją kontrolą i może być ustawiony na coś skandalicznego. Zaufaj mi.

 4
Author: Josh Stodola,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-31 04:11:27