在JavaScript中使用Pre-1000 AD日期的提示

bro*_*oox 11 javascript date

我很好奇是否有任何好的解决方案可以准确地建立公元1000年之前的日期 - 特别是公元1 - 100年.

例如,如果我想建立一个千禧年开始的日期,我不能只做...

new Date(Date.UTC(1,0,1,0,0,0,0));
Run Code Online (Sandbox Code Playgroud)

因为它试图"聪明"并假设1是1901年,这让我...

Sun Dec 31 1900 18:00:00 GMT-0600 (CST)
Run Code Online (Sandbox Code Playgroud)

同样的事情发生在99年......

new Date(Date.UTC(99,0,1,0,0,0,0));
Run Code Online (Sandbox Code Playgroud)

变成了

Thu Dec 31 1998 18:00:00 GMT-0600 (CST)
Run Code Online (Sandbox Code Playgroud)

思考?

Sha*_*vac 6

我更喜欢:

var d = new Date(Date.UTC(year, month, day, hour, min, sec, 0));
d.setUTCFullYear(year);
Run Code Online (Sandbox Code Playgroud)

这始终适用于所有支持的年份值。

如果你问我的话,setUTCFullYear() 调用修复了 JavaScript 的故意错误。


bro*_*oox 4

这是我想出的基本解决方案。如果日期早于 1000 年,我只需在构造日期时向其添加 1000,然后setUTCFullYear()再使用。

if (year >= 0 && year < 1000) { 
  var d = new Date(Date.UTC(year + 1000,mon,day,hour,min,sec,0));
  d.setUTCFullYear(d.getFullYear() - 1000); 
  return d; 
}
Run Code Online (Sandbox Code Playgroud)

1000 可能有点过分了,因为我只对 100 之前的日期有问题……但是,无论如何。