javascript 如何正确添加不同的时区和日期

yx2lnoni  于 2022-12-10  发布在  Java
关注(0)|答案(3)|浏览(167)

我添加了纽约市,美国时间和日期,但我不知道如何添加当前日期和时间以下的时区。有人知道如何正确地使用html和Java脚本吗

  • 美国纽约市
  • 英国伦敦安德莱姆
  • 阿联酋迪拜
  • 澳大利亚悉尼
  • 印度孟买

这里是美国纽约市我添加代码部分的时间

html格式

<p class="date_time"><strong id="sec"></strong></p></div>
     <div class="dte-fnt "> Wednesday, November 23, 2022 </div>

Java脚本

$(document).ready(function() {
        //EST
        setInterval( function() {
          var estTime = new Date();
          var currentDateTimeCentralTimeZone = new Date(estTime.toLocaleString('en-US', { timeZone: 'America/Chicago' }));
          var seconds = currentDateTimeCentralTimeZone.getSeconds();
          var minutes = currentDateTimeCentralTimeZone.getMinutes();
          var hours =  currentDateTimeCentralTimeZone.getHours()+1;//new Date().getHours();
          var am_pm = currentDateTimeCentralTimeZone.getHours() >= 12 ? "PM" : "AM";
    
          if (hours < 10){
            hours = "0" + hours;
          }
    
          if (minutes < 10){
            minutes = "0" + minutes;
          }
          if (seconds < 10){
            seconds = "0" + seconds;
          }
          var mid='PM';
          if(hours==0){ //At 00 hours we need to show 12 am
            hours=12;
          }
          else if(hours>12)
          {
            hours=hours%12;
            mid='AM';
          }
          var x3 = hours+':'+minutes+':'+seconds +' '+am_pm
    // Add a leading zero to seconds value
          $("#sec").html(x3);
        },1000);
    
    
      });
    </script>
mqkwyuun

mqkwyuun1#

添加循环

您可以在时区之间循环,并在每个时区中运行现有程序:

const timeZones = [
  "America/Chicago",
  "Europe/London",
  // Add the other timeZones you want here, e.g. by looking through
  // https://github.com/formatjs/date-time-format-timezone/tree/master/src/data/timezones
]

timeZones.forEach(timeZone => {
  var estTime = new Date();
  var currentDateTimeCentralTimeZone = new Date(estTime.toLocaleString('en-US', {
    timeZone: timeZone
  }));
  var seconds = currentDateTimeCentralTimeZone.getSeconds();
  var minutes = currentDateTimeCentralTimeZone.getMinutes();
  var hours = currentDateTimeCentralTimeZone.getHours();
  var am_pm = hours >= 12 ? "PM" : "AM";

  if (hours < 10) {
    hours = "0" + hours;
  }

  if (minutes < 10) {
    minutes = "0" + minutes;
  }
  if (seconds < 10) {
    seconds = "0" + seconds;
  }
  var mid = 'PM'; 

  if (hours == 0) { //At 00 hours we need to show 12 am
    hours = 12;
  } else if (hours > 12) {
    hours = hours % 12;
    mid = 'AM';
  }
  var x3 = hours + ':' + minutes + ':' + seconds + ' ' + am_pm

  console.log(x3 + " in " + timeZone)
})

您可以删除一些未使用的代码

您正在创建一个变量mid,但以后不会使用它。(碰巧您似乎在此变量中向后设置了AM/PM。)因此,您可以删除设置mid值的行。

修复hours中的相差一个错误

现在你在hours上加1,没有什么好的理由。我已经在上面的代码副本中删除了它。

在下午早些时候修复hours中的格式错误

当hours为0到9时,您也会在hours的开头加上“0”。您会 laterhours以12为模进行约简,以帮助获得12小时制。但是,我认为您执行这些步骤的方式是错误的。如果hours从(比如)14开始,它不会在开头加上“0”。但是稍后它将经历%12,给予2。然而,这将显示为“2”而不是“02,”因为加0步骤已经通过。
我建议将if (hours == 0)代码放在var am_pmif (hours<10)之间。

重新定位此注解,使其位于相关代码行的上方:

// Add a leading zero to seconds value

对于实际使用,请使用日期-时间库

我在这里所写的一切只是为了帮助你学习编程。如果你打算在生产中使用它,你最好使用像moment.jsluxon.js这样的库。它们被熟练地维护,并且已经想到了数百个可能发生的日期/时间操作问题,并且巧妙地解决了它们。
这个视频很好地解释了为什么创建自己的日期时间处理程序,除了出于好奇心或编程实践之外,是不值得的。
https://www.youtube.com/watch?v=-5wpm-gesOY

kuhbmx9i

kuhbmx9i2#

您可以使用Date.toLocaleString()在任何给定的IANA timezone中显示日期。
您可以使用传递给.toLocaleString()函数的选项自订日期格式。
第一个
我还建议看一下luxon日期/时间库,它允许将DateTime值转换为任何时区,并允许在输出格式方面有很大的灵活性。
第一个

yshpjwxd

yshpjwxd3#

我强烈建议使用一个库来实现这个功能,因为处理时区和偏移量是相当复杂的。我的建议是使用moment及其扩展名moment-timezone。你必须查看文档来理解它,但一个基本的例子可能是这样的:

var moment = require('moment-timezone'); // make sure you install `moment` as well!

var date = moment(); // local datetime
var dateNewYork = moment('America/New_York'); // This won't work for every town, but New York is a standardized timezone indicator.

console.log(date.format('LLL'));
console.log(dateNewYork.format('LLL'));

相关问题