根据它创建的时区显示日期- JavaScript

Show the date according to it's created timezone - JavaScript

本文关键字:显示 日期 JavaScript 时区 创建      更新时间:2023-09-26

假设在国家A创建了一个事件,timeString为"2015-08-27T16:00:32+02:00"一个人(我)想看到事件的时间,但不是根据我当地的格林尼治标准时间,让我说我的是+05:00…我想向用户显示创建者的时区,即

2015-08-27T16:00:32+02:00

总之,显示的时间应该是4:00PM (according to +02:00),而不是7:00PM (according to +05:00)

是否有使用原生javascript日期对象或moment.js的任何解决方案?

您应该在数据库中保存创建者的日期和时区。当你需要显示它们时,你可以这样做:

$(document).ready(function () {
    moment.tz.add('America/Los_Angeles|PST PDT|80 70|0101|1Lzm0 1zb0 Op0');
    
    var date = moment('2015-08-27T16:00:32+02:00'); // Get date from db
    $('#date').html(date.format('LLLL')); // Display date using the browser's timezone
    var timezone = 'America/Los_Angeles';// Get timezone from db
    $('#newDate').html(date.clone().tz(timezone).format('LLLL')); // Clone the date, set the new timezone and display
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.4.0/moment-timezone.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<pre id="date"></pre>
<pre id="newDate"></pre>

在本例中,您从数据库中获取日期并将其显示在上面的框中。像往常一样,moment会尝试使用浏览器的时区来显示日期。

然后从数据库中获取时区,设置新的时区,您可以看到在下面的框中日期发生了变化。

显然,这个例子只有在您不在America/Los_Angeles时区时才有效。在这种情况下,您应该得到两个相等的字符串,这实际上是正确的行为,但它不允许您看到moment_timezone的作用。