2011-02-24 25 views
0

对于使用亚马逊的Mechanical Turk API我想获取当前GMT时间,并显示在ISO格式如何获得正确的GMT时间在Javascript

2011-02-24T20:38:34Z 

我想知道是否有什么办法正确得到gmt时间,也可以用ISO格式重新格式化。我可以使用类似now.toGMTString();之类的东西,但它使得日期之外的字符串变得很难,并且很难用ISO重新格式化它。

+1

检查[日期对象]上的方法的文件(https://developer.mozilla.org/en/JavaScript/Reference/global_objects/date) – Pointy 2011-02-24 20:50:33

+0

这超出了你的问题的范围,但你可能更适合在服务器端获取这个值。如果您需要基于服务器提供的时间的javascript Date对象,则可以使用setUTC ...()函数。 – Dave 2011-02-24 21:15:44

回答

2
function pad(num) { 
    return ("0" + num).slice(-2); 
} 

function formatDate(d) { 
    return [d.getUTCFullYear(), 
      pad(d.getUTCMonth() + 1), 
      pad(d.getUTCDate())].join("-") + "T" + 
      [pad(d.getUTCHours()), 
      pad(d.getUTCMinutes()), 
      pad(d.getUTCSeconds())].join(":") + "Z"; 
} 

formatDate(new Date()); 

输出:

"2011-02-24T21:01:55Z" 
+0

幸运的是现在[* toISOString *](http://ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.toisostring)。 ;-) – RobG 2016-11-14 01:04:04

4
var year = now.getUTCFullYear() 
var month = now.getUTCMonth() 
var day= now.getUTCDay() 
var hour= now.getUTCHours() 
var mins= now.getUTCMinutes() 
var secs= now.getUTCSeconds() 

var dateString = year + "-" + month + "-" + day + "T" + hour + ":" + mins + ":" + secs + "Z" 

您应该现在使用UTC而不是GMT。 (金额几乎同样的事情,现在,它是无论如何的新标准)

+0

这不是一个正确的解决方案。 – 2011-02-24 21:15:06

+0

这并不坏,除了它不填充1位数的事实,并没有说明月份将会是0-11的事实,而不是1-12 – Dave 2011-02-24 21:17:43

+1

这些都是非常大的错误。它还打印每月当天的哪一天。 – 2011-02-24 21:21:33

3

我相信这会为你工作:

Number.prototype.pad = function(width,chr){ 
    chr = chr || '0'; 
    var result = this; 
    for (var a = 0; a < width; a++) 
     result = chr + result; 
    return result.slice(-width); 
} 
Date.prototype.toISOString = function(){ 
    return this.getUTCFullYear().pad(4) + '-' 
     + this.getUTCMonth().pad(2) + '-' 
     + this.getUTCDay().pad(2) + 'T' 
     + this.getUTCHours().pad(2) + ':' 
     + this.getUTCMinutes().pad(2) + ':' 
     + this.getUTCSeconds().pad(2) + 'Z'; 
} 

用法:

var d = new Date; 
alert('ISO Format: '+d.toISOString()); 

没有太大的不同比其他人的答案要好,但为了方便使它内置于日期对象

+0

getTimezoneOffset()是在几分钟内,因此您可能需要使用addMinutes而不仅仅是减去偏移量。 – Dave 2011-02-24 21:12:33

+0

@Dave:没错,还在玩它,所以没有完成调整。 ;-)但是很好的电话。 – 2011-02-24 21:13:42

2

此脚本可以照顾它

/* use a function for the exact format desired... */ 
function ISODateString(d){ 
function pad(n){return n<10 ? '0'+n : n} 
return d.getUTCFullYear()+'-' 
    + pad(d.getUTCMonth()+1)+'-' 
    + pad(d.getUTCDate())+'T' 
    + pad(d.getUTCHours())+':' 
    + pad(d.getUTCMinutes())+':' 
    + pad(d.getUTCSeconds())+'Z'} 
var d = new Date(); 
document.write(ISODateString(d)); // prints something like 2009-09-28T19:03:12Z 
相关问题