Javascript 中处理民国时期的时间的一个问题
我弄了一个排八字的程序,操作系统 OSX 10.9.2,用西元时没问题,用农历时在火狐浏览器中会快一小时,但是在 Chrome 中没有问题,很是奇怪。经过跟踪源代码发现,火狐在处理民国的时间时,是按民国的标准来处理的。我在贵州,现在使用的是北京时间(GMT+8),但是在民国时期,贵州属于陇蜀时区(GMT+7),所以一个现在的时间和民国时期的时间相减,就会快一个小时。而我在转换的过程中,是以1921-02-08(正月初一)为起点的,所以日期相减的时候,就多了一个小时。而 Chrome 则不管,把所有时间都当成了北京时间。为了避免这个问题,需要修正代码,下面的代码在两种浏览器中都能正常工作。
CalendarOfChinese.firstDate = function(){
var d = new Date(1921, 1, 8);
var dm = -480 - d.getTimezoneOffset() ;
d.setTime(d.getTime()+dm*60000);
return d;
}();
另外我发现,在别的语言中也有这样的问题,比如 Perl、 Ruby。Ruby最奇怪,1980-05-01后的日期才换成GMT+8,以前一直是GMT+7,不知道是为什么?另外,在SWI-PROLOG中,也是统一按GMT+8处理的
评论已关闭