夏令时和标准时的区别

运行以下代码,会发现相同的代码,在Chrome浏览器会打印出来1986-08-19,而在360浏览器打印出来的是1986-08-18。

查了一下,原来中国在86年-92年实行了一段时间的夏令时:

1986年4月,中国中央有关部门发出“在全国范围内实行夏时制的通知”,具体作法是:每年从四月中旬第一个星期日的凌晨2时整(北京时间),将时钟拨快一小时,即将表针由2时拨至3时,夏令时开始;到九月中旬第一个星期日的凌晨2时整(北京夏令时),再将时钟拨回一小时,即将表针由2时拨至1时,夏令时结束。从1986年到1991年的六个年度,除1986年因是实行夏时制的第一年,从5月4日开始到9月14日结束外,其它年份均按规定的时段施行。在夏令时开始和结束前几天,新闻媒体均刊登有关部门的通告。1992年起,夏令时暂停实行。


这时候我们在消费这个时间戳的时候就不好判断原有的时间是什么了。仅仅针对生日这种特殊情况来处理的话,因为上传的时间肯定是某日的零点的时间,因此,检测是23点的时候,我们可以加一个小时,但是除了这种特殊情况我们就不好处理了。

想要根治这种问题,我们就需要在生产这个时间戳的时候就要针对夏令时做处理。比如说检测new Date().toString()中是否包含夏令时或者+0900这样的字符串。如果有则说明进行了夏令时转换。这时候我们的时间戳就需要在原有的基础上加上1h的时间。或者使用momentjs的检测是否进行夏令时转换函数判断也可以。

或者直接前后台不用时间戳,直接用年月日来传递。

function getdata(time){

            var formatTime = function(number,format) { //转换日期

                var formateArr  = ['Y','M','D','h','m','s'];

                var returnArr  = [];

                var date = new Date(number);

                returnArr.push(date.getFullYear());

                returnArr.push(formatNumber(date.getMonth() + 1));

                returnArr.push(formatNumber(date.getDate()));

                returnArr.push(formatNumber(date.getHours()));

                returnArr.push(formatNumber(date.getMinutes()));

                returnArr.push(formatNumber(date.getSeconds()));

                for (var i in returnArr)

                {

                    format = format.replace(formateArr[i], returnArr[i]);

                }

                return format;

            }

            //数据转化

            var formatNumber = function(n) {

                n = n.toString();

                return n[1] ? n : '0' + n

            }

            return formatTime(time,'Y-M-D');

        }

        console.log(getdata(524761200000))

你可能感兴趣的:(夏令时和标准时的区别)