使用Date.UTC()遇到问题,因为Date.UTC()会自动将0-99之间的任何年份转换为1900-1999,当我需要该函数来维持传递给它的原始年份时。我已经尝试传递一个字符串,但是我仍然遇到同样的问题。
更新: 感谢您的回复,在阅读了MDN文档之后,我采用了一种适用于Chrome和Chrome的解决方案。 Firefox浏览器。
function getUTC(date) {
var year = date.getUTCFullYear();
if (year >= 0 && year < 100) {
//calculate the difference in ms between UTC time and local time
var diff = (new Date(0,0,1,0,0,0,0)).getTime() - Date.UTC(0,0,1,0,0,0,0);
//return the local time plus the calculated difference
return date.getTime() + diff;
}
return Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds(), date.getUTCMilliseconds());
}
获得UTC时间的一种简单方法是将.setUTCFullYear(1200,0,1)
或任何.setUTC______()
方法的返回值分配给变量。
var date = new Date();
var time = date.setUTCFullYear(1200,0,1)
// time equals -24298834086121
答案 0 :(得分:5)
根据MDN,UTC()方法不支持100年前的年份:
如果指定了介于0到99之间的年份,则该方法会转换年份 到20世纪的一年(1900年+年);例如,如果你 指定95,使用1995年。
您可能需要指定各个组件,以便使用setUTCFullYear()。
var d = new Date(Date.UTC(95, 0, 31, 23, 59, 59));
console.log(d);
d.setFullYear(95);
console.log(d);
答案 1 :(得分:4)
虽然在AD 100之前创建一年的日期可能很难,但很容易到 将现有Date对象设置为任何年份,包括BC年的负数。
请注意,只有IE在返回的字符串中包含“BC”,并正确设置BC年。 在非IE浏览器中,您可以将年份设置为0,这实际上并不存在, 并且它们包括在加上或减去跨越AD和BC日期的年份的非光年。
IE将指定为0的年份设置为1AD之前的第一个可能年份,即1 BC。
一个BC只有1年,而不是2年。 公元前五年,公元前五年,而不是公元前四年。function bc(){
var D= new Date(), A= [].slice.call(arguments, 0);
D.setFullYear.apply(D, A);
if(A[0]<= 0 &&!document.documentMode){
D.setFullYear(D.getFullYear()-1);
}
return D;
}
bc(50, 0, 1, 0, 0, 0, 0).toUTCString()+'\n\t'+
bc(-50, 0, 1, 0, 0, 0, 0).toUTCString()
/*
MSIE 8.0 returns:
Sat, 1 Jan 50 13:41:00 UTC
Sun, 1 Jan 51 B.C. 13:41:00 UTC
Firefox 7.0.1 returns:
Sat, 01 Jan 0050 13:41:35 GMT
Sat, 01 Jan -0051 13:41:35 GMT
Opera 11.51 returns:
Sat, 01 Jan 0050 13:42:11 GMT
Sat, 01 Jan -051 13:42:11 GMT
MSIE 10.0 returns:
Sat, 1 Jan 50 13:42:36 UTC
Sun, 1 Jan 51 B.C. 13:42:36 UTC
Chrome 14.0.835.163 returns:
Sat, 01 Jan 50 13:43:37 GMT
Sat, 01 Jan -51 13:43:37 GMT
Safari 5.1 returns:
Sat, 01 Jan 0050 13:44:07 GMT
Sat, 01 Jan -051 13:44:07 GMT
*/
答案 2 :(得分:1)
Date.UTC()仅限于unix时间戳范围。从本质上讲,你的问题没有意义,因为UTC的目的是返回一个时间戳值,这是自“1970年1月1日”以来的秒数