对于使用亚马逊的Mechanical Turk API我想获取当前GMT时间,并显示在ISO格式如何获得正确的GMT时间在Javascript
2011-02-24T20:38:34Z
我想知道是否有什么办法正确得到gmt时间,也可以用ISO格式重新格式化。我可以使用类似now.toGMTString();
之类的东西,但它使得日期之外的字符串变得很难,并且很难用ISO重新格式化它。
对于使用亚马逊的Mechanical Turk API我想获取当前GMT时间,并显示在ISO格式如何获得正确的GMT时间在Javascript
2011-02-24T20:38:34Z
我想知道是否有什么办法正确得到gmt时间,也可以用ISO格式重新格式化。我可以使用类似now.toGMTString();
之类的东西,但它使得日期之外的字符串变得很难,并且很难用ISO重新格式化它。
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"
幸运的是现在[* toISOString *](http://ecma-international.org/ecma-262/7.0/index.html#sec-date.prototype.toisostring)。 ;-) – RobG 2016-11-14 01:04:04
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。 (金额几乎同样的事情,现在,它是无论如何的新标准)
这不是一个正确的解决方案。 – 2011-02-24 21:15:06
这并不坏,除了它不填充1位数的事实,并没有说明月份将会是0-11的事实,而不是1-12 – Dave 2011-02-24 21:17:43
这些都是非常大的错误。它还打印每月当天的哪一天。 – 2011-02-24 21:21:33
我相信这会为你工作:
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());
没有太大的不同比其他人的答案要好,但为了方便使它内置于日期对象
getTimezoneOffset()是在几分钟内,因此您可能需要使用addMinutes而不仅仅是减去偏移量。 – Dave 2011-02-24 21:12:33
@Dave:没错,还在玩它,所以没有完成调整。 ;-)但是很好的电话。 – 2011-02-24 21:13:42
此脚本可以照顾它
/* 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
检查[日期对象]上的方法的文件(https://developer.mozilla.org/en/JavaScript/Reference/global_objects/date) – Pointy 2011-02-24 20:50:33
这超出了你的问题的范围,但你可能更适合在服务器端获取这个值。如果您需要基于服务器提供的时间的javascript Date对象,则可以使用setUTC ...()函数。 – Dave 2011-02-24 21:15:44