【问题标题】:Get Users Time and Subtract by Local Time获取用户时间并按本地时间减去
【发布时间】:2018-03-18 18:17:38
【问题描述】:

我正在尝试获取用户当地时间并用我自己的时间减去它以获得时差作为输出。

这是我目前所拥有的:

var myTimezone = new Date();
var usersTimezone = 0; // UsersTimezone is missing
var timeDifference = myTimezone.getHours() - usersTimezone + " hours";

document.getElementById("time").innerHTML = "Time Difference: " + timeDifference;
<div id="time">

</div>

我找不到一个很好的解决方案来获取用户的确切当地时间,所以也许有人可以在这里帮助我。

非常感谢!

【问题讨论】:

  • 用户如何知道您的时区?当您创建一个新的Date 时,它是在用户处创建的,因此您需要使用ajax 向服务器询问其Date 或在呈现页面时设置它
  • 既然是javascript,那就是用户的时区,你可以通过服务器端语言来保留你的时区

标签: javascript html time


【解决方案1】:

简单的方法:没有夏令时

就像here 解释的那样,有一个函数getTimezoneOffset() 可以获取用户的时区。

但你必须知道你在女巫时区,在我的例子中你在时区 ​​UTC+0。

var myTimezone = 1;
var usersTimezone =  (new Date()).getTimezoneOffset() / 60;
var timeDifference = Math.abs(myTimezone + usersTimezone) + " hours";

document.getElementById("time").innerHTML = "Time Difference: " + timeDifference;
<div id="time">

</div>

夏令时计算

下面的代码也看他daylight saving time。 这更复杂,我为此使用了momentjs

也可以看看这篇文章: https://stackoverflow.com/a/29268535/2801860

var now = moment();
var usersOffset = now.utcOffset();
now.tz("Europe/Berlin"); // your time zone, not necessarily the server's
var myOffset = now.utcOffset();
var diffInMinutes = Math.abs(usersOffset - myOffset);
document.getElementById("time").innerHTML = "Time Difference: " + (diffInMinutes/60);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.21.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.21.0/moment-with-locales.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.14/moment-timezone.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.14/moment-timezone-with-data.min.js"></script>

<div id="time">

</div>

【讨论】:

  • 非常感谢,这对我来说完全有道理。我位于德国,因此 UTC 为 +1
  • 我需要将 -1 作为我的时区变量吗?因为 +1 显示我有 2 小时的时差。
  • 抱歉,计算错误,现在可以了 - 德国是 UTC+1
  • 不错!谢谢你。。是什么导致之前的计算出现问题?
  • 您好。再次感谢。我只注意到一件事,今天时间从冬天变成了夏天,时差从 0h 变成了 1h。有没有办法解决这个问题? :)
猜你喜欢
  • 1970-01-01
  • 2011-06-24
  • 2013-09-18
  • 1970-01-01
  • 2021-01-01
  • 2011-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多