js 时间戳差 转换成 年月日天数

想做脚本的可用时间的html显示,但是js并没有封装这样的工具类

在csdn搜了一下,有个大佬已经做好了

https://blog.csdn.net/qq_26744901/article/details/51735988

但是bug。我是直接在控制台调试的,简单方便

问题出来了,传入的时间戳小于1000,结果就是是负数,年数还很大。

悲剧,还是得细细的看代码。

出的问题很简单,

输入的时间戳和一个很大的分界线时间戳,做除法会是小数(因为传入的时间戳很小),小数再parseInt就会变成负数

js不和java一样,java是强类型的编程语言,整数除整数一定是整数,js不一样,整数除整数会是小数,所以需要先取整。这位大哥估计是写java没太注意,哈哈

改进一下

加上取整就好了,忽略掉小数部分

完整代码贴上

function getdate(period) {
        var yearLevelValue = 365 * 24 * 60 * 60 * 1000;
        var monthLevelValue = 30 * 24 * 60 * 60 * 1000;
        var dayLevelValue = 24 * 60 * 60 * 1000;
        var hourLevelValue = 60 * 60 * 1000;
        var minuteLevelValue = 60 * 1000;
        var secondLevelValue = 1000;
 
        function getDifference(period) {
            /*******计算出时间差中的年、月、日、天、时、分、秒*******/
            var year = parseInt(getYear(period));
            var month = parseInt(getMonth(period - year * yearLevelValue));
            var day = parseInt(getDay(period - year * yearLevelValue - month * monthLevelValue));
            var hour = parseInt(getHour(period - year * yearLevelValue - month * monthLevelValue - day * dayLevelValue));
            var minute = parseInt(getMinute(period - year * yearLevelValue - month * monthLevelValue - day * dayLevelValue - hour * hourLevelValue));
            var second = parseInt(getSecond(period - year * yearLevelValue - month * monthLevelValue - day * dayLevelValue - hour * hourLevelValue - minute * minuteLevelValue));
            var result = "";
            if (year != 0)result = result + year + "年";
            if (month != 0)result = result + month + "月";
            if (day != 0)result = result + day + "天";
            result = result + hour + "时" + minute + "分" + second + "秒";
            function getYear(period) {
                //Math.floor()
                return Math.floor(parseInt(period) / yearLevelValue);
            }
            function getMonth(period) {
                return Math.floor(parseInt(period) / monthLevelValue);
            }
            function getDay(period) {
                return Math.floor(parseInt(period) / dayLevelValue);
            }
            function getHour(period) {
                return Math.floor(parseInt(period) / hourLevelValue);
            }
            function getMinute(period) {
                return Math.floor(parseInt(period) / minuteLevelValue);
            }
            function getSecond(period) {
                return Math.floor(parseInt(period) / secondLevelValue);
            }
            return result;
        }
        return getDifference(period);
    }

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值