【问题标题】:How can I obtain the local time in jQuery?如何在 jQuery 中获取当地时间?
【发布时间】:2010-10-14 05:45:36
【问题描述】:

我正在使用 jQuery,我需要获取德国的当地时间。

来自任何国家/地区访问我网站的任何人都应该能够知道德国的时间。

如果时间在 0:00 到 12:00 之间,我需要发出警报:“早安”。

如果时间在 12:00 到 17:00 之间,我需要提醒一下:“下午好”。

如何在 jQuery 中实现这一点?

【问题讨论】:

  • 不要依赖客户端的日期/时间。不能保证准确!
  • 这真的和jQuery无关。
  • 客户永远是对的这一事实又如何呢?就用户所见,他们的时间是正确的(即使它可能是错误的)。从另一台服务器获取正确的时间将从用户的角度显示错误的时间。

标签: javascript jquery plugins time


【解决方案1】:

您可以通过获取客户端的本地时区偏移量得到格林威治标准时间,然后加上德国时区(中欧时间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.");
}

更新:我同意@Josh,上面的代码完全依赖于客户端。让我们努力做得更好:

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

我们现在利用JSONPjsontime 服务器进行跨域请求,该服务器公开了一个完整的JSON API 来查询时间和时区信息。

您可以使用代码 here,也可以探索 JSONP API here

万岁!,没有服务器端代码!

【讨论】:

  • 对不起,我的朋友,你的泡沫破了,但这完全不可靠。这取决于客户端系统时钟,它可能被设置为完全离谱的东西。过去,使用客户端时钟完全搞砸了我的应用程序。必须将服务器端日期/时间注入隐藏字段!
  • 你不觉得这对于只是用来显示问候的东西有点多吗?你知道,它不是导弹发射控制应用程序。
  • @nickf:是的,可能是,我只是为了好玩!,并用 jQuery 做一些事情,正如 OP 所要求的:D...
  • 嗨CMS;你提供了很好的解决方案。昨天我已经在我的应用程序中实现了这个,它工作得很好。但是当我今天测试时,当我点击这个 URL 时遇到问题,Google App Requests over.... json-time.appspot.com/time.json?tz 现在我担心的是,这不是可靠的服务。你有什么建议?或者我可以获取该服务的源代码,然后我可以将其上传到我的服务器并使用我的服务器中的服务,而不是依赖另一台服务器。谢谢你的时间。请指教....
【解决方案2】:

您想获取德国的时间,还是用户所在时区的时间,无论他们身在何处?如果是后者,Date() 函数默认工作在本地时区。

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

【讨论】:

    【解决方案3】:

    您需要将 Web 服务器中的日期/时间注入页面上的隐藏字段,然后您可以使用 jQuery 访问该字段并加载自然的 Javascript Date 对象。您确实希望依赖客户端的日期/时间,因为它超出了您的控制范围,并且可能被设置为令人发指的事情。相信我。

    【讨论】:

    • 好的,鉴于 OP 中所述的情况,即它被用于简单的“早安/晚安”问候语,这太荒谬了。
    • nickf:100% 保证所有用户都将获得类似的体验,这既不荒谬也不夸张。在我的世界里,这绝对是强制性的。
    • @nickf for realsies?隐藏领域不是火箭科学。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    相关资源
    最近更新 更多