如何在我的网站上使用 Javascript 显示当前/实时英国(时间)

How do I show the current/live UK (time) using Javascript on my website

提问人:user1406440 提问时间:9/19/2023 最后编辑:mplungjanuser1406440 更新时间:9/21/2023 访问量:93

问:

我有一个脚本,用于在网站上实时显示和更新数据/时间。因此,我希望显示英国时间,当时间流逝时也会更新,而不仅仅是静态值。

我希望它始终显示特定时区(英国)的时间 - 这可能吗?

我不需要这个版本中的月份,所以这就是你可以看到的注释。

顺便说一句,即使在原始版本上也是如此。时间“跳跃”到视野中,因为它需要一段时间才能加载 - 有没有办法解决这个问题?

可能值得注意的是,这是一个简单的静态网站,因此没有数据库或其他东西可以玩来获得时间。

干杯!

function showDateTime() {
    var currentDate = document.getElementById("date");
    var currentTime = document.getElementById("time");
    
    var date = new Date();
    var dayList = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
    /* var monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; */
    var dayName = dayList[date.getDay()];
    /* var monthName = monthNames[date.getMonth()]; */
    /* var today = `${dayName} ${date.getDate()} ${monthName}`; */
    var today = `${dayName}`;
    
    var hour = ('0' + date.getHours()).substr(-2);
    var min = ('0' + date.getMinutes()).substr(-2);
    var sec = ('0' + date.getSeconds()).substr(-2);
    
    
    var time = hour + ":" + min + ":" + sec;
    currentDate.innerText = `${today}`;
    currentTime.innerText = `${time}`;
}
setInterval(showDateTime, 1000);
<p><span id="date" class="os-menu__item"></span> <span id="time"></span> GMT</p>            

JavaScript HTML 日期时间

评论

1赞 mplungjan 9/19/2023
showDateTime(); setInterval(showDateTime, 1000);将修复延迟
0赞 user1406440 9/19/2023
我不认为有人链接到导致此帖子被关闭的帖子已经解决了这个问题。我的代码目前实时更新时间,而链接的示例似乎只在加载时显示一次并且不更新?
0赞 user1406440 9/19/2023
是的,我的错,道歉!
1赞 Salman A 9/19/2023
格林威治标准时间还是世界标准时间?或者某个国家/地区的时区在冬季使用 GMT,在夏季使用其他时区?
0赞 user1406440 9/19/2023
这将是英国(格林威治标准时间),因为它是为了显示我的工作地点以及我与美国客户合作时的当前实时时间。但是,是的,这很烦人,例如,十月份的时间会改变一个小时!

答:

2赞 mplungjan 9/19/2023 #1

英国需要 INTL - 此代码将显示 BST/GMT,具体取决于夏令时

const todaySpan = document.getElementById("date");
const opts = {
  hour: '2-digit',
  minute: '2-digit',
  second: '2-digit',
  weekday: 'short',
  timeZone: 'Europe/London',
  hour12: true, // set to false to get 24 hour format without am/pm
  timeZoneName: 'short'
};

const showDateTime = () => todaySpan.textContent = new Date().toLocaleString('en-GB', opts);
showDateTime();
setInterval(showDateTime, 1000);
<p><span id="date" class="os-menu__item"></span></p>

GMT/UTC 可以通过字符串操作来完成,但将采用 24 小时格式

const todaySpan = document.getElementById("date");
const re = /([a-zA-Z]+), (\d+) ([a-zA-Z]+) (\d+) ([\d:]+) (\w+)/;
const showDateTime = () => {
  const [_, dayString, date, month, year, time, tz] = new Date().toUTCString().match(re); // toUTCString is GMT
  todaySpan.textContent =  `${dayString} ${time} ${tz}`.replace(/,/g,""); // remove the comma
};  
showDateTime();
setInterval(showDateTime, 1000);
<p><span id="date" class="os-menu__item"></span></p>

评论

2赞 RobG 9/19/2023
或。;-)new Date().toLocaleString('en',{hour:'2-digit',minute:'2-digit',second:'2-digit', weekday:'short', timeZone:'UTC', hour12: false, timeZoneNameL:'short'})
2赞 mplungjan 9/19/2023
@RobG谢谢,错过了。但是 GMT 和效果更好timeZoneName:'shortGeneric'
1赞 mplungjan 9/19/2023
这是可能的。您的实际时区是什么?
1赞 mplungjan 9/21/2023
查看更新.....
1赞 RobG 9/24/2023
@mplungjan——当心国际变幻莫测。对于澳大利亚/布里斯班,Safari 返回“布里斯班时间”,即使按照民用时区命名标准,这也毫无用处(我认为美国至少有 11 个城镇以布里斯班命名,更不用说其他国家了)。它应该是 EST(全球化之前很常见)或 AEST(最近更常见)。其他变体不时被使用......