在浏览器中显示带有时区的客户端机器日期和时间

Display client machine date and time with timezone in browser

本文关键字:机器 客户端 日期 时间 时区 浏览器 显示      更新时间:2023-09-26

在我的JSP页面中,我试图用时区显示本地日期和时间。它可以是JavaScript, jQuery或JSTL,随便哪个。

我试过<fmt:formatDate value="<%= new java.util.Date() %>" pattern="MMM d, hh:mm a z"/>,但时间是CDT,即使我把我的时区改为东部。

我需要这个图案中的May 22, 10:34 AM EDT

任何建议吗?

如果你想知道客户端相对于GMT/UTC的时区,你可以这样做:

var d = new Date();
var tz = d.toString().split("GMT")[1].split(" (")[0]; // timezone, i.e. -0700

如果您想要时区的实际名称,您可以试试:

 var d = new Date();
 var tz = d.toString().split("GMT")[1]; // timezone, i.e. -0700 (Pacific Daylight Time)
更新1

根据第一个注释,您还可以使用d.p ettimezoneoffset()从UTC获得以分钟为单位的偏移量。不过有几个问题。

返回的分钟数的符号(+/-)可能与您期望的相反。如果你比UTC晚8小时,它将返回480而不是-480。有关更多文档,请参阅MDN或MSDN。它实际上并没有返回客户端报告的时区,就像我给出的第二个例子一样。当前距离UTC的分钟偏移量。所以它会根据夏令时而变化。更新2

虽然字符串分割的例子可以工作,但它们读起来可能令人困惑。这是一个regex版本,应该更容易理解,可能更快(两种方法都非常快)。

如果你想知道客户端相对于GMT/UTC的时区,你可以这样做:

var gmtRe = /GMT(['-'+]?'d{4})/; // Look for GMT, + or - (optionally), and 4 characters of digits ('d)
var d = new Date().toString();
var tz = gmtRe.exec(d)[1]; // timezone,    i.e. -0700

如果您想要时区的实际名称,请尝试:

var tzRe = /'((['w's]+)')/; // Look for "(", any words ('w) or spaces ('s), and ")"
var d = new Date().toString();
var tz = tzRe.exec(d)[1]; // timezone, i.e. "Pacific Daylight Time"

您可以使用Javascript日期对象获取客户端日期。

var clientDate = new Date(); //for day clientDate.getDate(); //for month client.getMonth()

然后使用

得到与UTC的差值
clientDate.getTimezoneOffset();
//This returns -120 for GMT+2,