获取特定时区的时间

时间:2011-11-21 05:28:19

标签: javascript date time timezone

我正在使用JavaScript Date类&尝试使用getDate()方法获取当前日期。但显然它是加载系统日期&时间。我正在运行来自印度的代码,但我希望得到日​​期&英国时间使用相同的方法。我怎么能这样做?

9 个答案:

答案 0 :(得分:50)

如果您知道UTC偏移,那么您可以使用以下函数传递它并获得时间:

function calcTime(city, offset) {
    // create Date object for current location
    var d = new Date();

    // convert to msec
    // subtract local time zone offset
    // get UTC time in msec
    var utc = d.getTime() + (d.getTimezoneOffset() * 60000);

    // create new Date object for different city
    // using supplied offset
    var nd = new Date(utc + (3600000*offset));

    // return time as a string
    return "The local time for city"+ city +" is "+ nd.toLocaleString();
}

alert(calcTime('Bombay', '+5.5'));

取自:Convert Local Time to Another

答案 1 :(得分:30)

您可以使用Intl.DateTimeFormat

var options = {
    timeZone: 'Europe/London',
    year: 'numeric', month: 'numeric', day: 'numeric',
    hour: 'numeric', minute: 'numeric', second: 'numeric',
},
    formatter = new Intl.DateTimeFormat([], options)
formatter.format(new Date())

或者,如果您只格式化一次而不是批量使用Date.prototype.toLocaleDateString()

(new Date()).toLocaleString([], options)

不幸的是,浏览器需要理解UTC以外的时区,所以try这些阻塞并在失败的情况下找出替代方案,例如从服务器获取时区偏移量。

答案 2 :(得分:18)

执行此操作的最佳方法是使用getLocaleString,如下所示:

创建日期对象:

date = new Date(0)

如果您在柏林,则应转换为此字符串:

  

Thu Jan 01 1970 01:00:00 GMT + 0100(CET)

在雅典获得时间:

date.toLocaleString('de-DE', {hour: '2-digit',   hour12: false, timeZone: 'Europe/Athens' })
  

'02'

在上海获得时间:

date.toLocaleString('de-DE', {hour: '2-digit',   hour12: false, timeZone: 'Asia/Shanghai' })
  

'08'

答案 3 :(得分:9)

这是获得##

的正确方法
function getTime(offset)
        {
            var d = new Date();
            localTime = d.getTime();
            localOffset = d.getTimezoneOffset() * 60000;

            // obtain UTC time in msec
            utc = localTime + localOffset;
            // create new Date object for different city
            // using supplied offset
            var nd = new Date(utc + (3600000*offset));
            //nd = 3600000 + nd;
            utc = new Date(utc);
            // return time as a string
            $("#local").html(nd.toLocaleString());
            $("#utc").html(utc.toLocaleString());
        }

答案 4 :(得分:5)

您可以使用getUTCDate()和相关的getUTC...()方法根据UTC时间访问时间,然后进行转换。

如果您愿意,您可以使用valueOf(),它返回自Unix时代以来以UTC为单位的秒数,并使用它,但它可能会涉及更多。

答案 5 :(得分:1)

Date.getTimezoneOffset()

getTimezoneOffset()方法返回格林威治标准时间(GMT)与当地时间之间的时差,以分钟为单位。

例如,如果您的时区是GMT + 2,则会返回-120。

注意:此方法始终与Date对象一起使用。

var d = new Date()
var gmtHours = -d.getTimezoneOffset()/60;
document.write("The local time zone is: GMT " + gmtHours);
//output:The local time zone is: GMT 11

答案 6 :(得分:0)

如果您拥有正确的日期和时间非常重要;最好在您的服务器上(当然您以UTC运行)提供服务,返回时间。然后,您可以在客户端上创建一个新日期并比较这些值,并在必要时使用与服务器时间的偏移量调整所有日期。

为什么这样?我有很难再现的错误报告,因为我无法在服务器日志中找到错误消息,直到我发现错误报告在 收到它后两天邮寄。您可以可能信任浏览器在发送UTC时间戳时正确处理时区转换,但您显然无法信任用户正确设置其系统时钟。 (如果用户也错误地设置了他们的时区,则实际上没有任何解决方案;除了在“本地”时间打印当前服务器时间之外)

答案 7 :(得分:-2)

来自客户端的简短回答:不,你必须从服务器端获取它。

答案 8 :(得分:-2)

.getTimezoneOffset()方法应该有效。这将获得您的时区和GMT之间的时间。然后你可以计算到你想要的任何东西。