Date.UTC()年份介于0-100之间

时间:2011-10-14 10:08:03

标签: javascript

使用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

3 个答案:

答案 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日”以来的秒数