我该如何让这个功能?

时间:2015-07-29 10:47:34

标签: javascript

我有这个JavaScript代码。我的问题是,我该如何使其发挥作用?

我尝试了timeSince("2008");,但这并没有显示任何内容。

var timeSince = function(date) {
    if (typeof date !== 'object') {
        date = new Date(date);
    }

    var seconds = Math.floor((new Date() - date) / 1000);
    var intervalType;

    var interval = Math.floor(seconds / 31536000);
    if (interval >= 1) {
        intervalType = 'year';
    } else {
        interval = Math.floor(seconds / 2592000);
        if (interval >= 1) {
            intervalType = 'month';
        } else {
            interval = Math.floor(seconds / 86400);
            if (interval >= 1) {
                intervalType = 'day';
            } else {
                interval = Math.floor(seconds / 3600);
                if (interval >= 1) {
                    intervalType = "hour";
                } else {
                    interval = Math.floor(seconds / 60);
                    if (interval >= 1) {
                        intervalType = "minute";
                    } else {
                        interval = seconds;
                        intervalType = "second";
                    }
                }
            }
        }
    }

    if (interval > 1 || interval === 0) {
        intervalType += 's';
    }

    return interval + ' ' + intervalType;
};

代码来自How to format time since xxx e.g. “4 minutes ago” similar to Stack Exchange sites

2 个答案:

答案 0 :(得分:0)

您引用的代码已经是一个函数,但它不输出任何内容,只返回包含您要查找的值的String。因此,您必须使用javascript在HTML中插入String,或者如果您只想查看值,则可以alert()。你回归45年的原因是你将一个整数传递给函数。

函数本身使用JavaScript内置的Date()对象来计算时间。传入一个整数时,实际上是以毫秒值实例化该对象。

这是来自W3学校:

  

使用new Date(number)创建一个新的日期对象作为零时间加上数字。零时间是1970年1月1日00:00:00 UTC。数字以毫秒为单位指定:

猜猜自1970年以来已过去多少年(45年!)。因此,如果您想知道自2000年以来已经过了多少年,请不要使用timeSince(2000),请务必使用timeSince("2000")(引号会有所不同)。

更新Fiddle

已编辑更正了小提琴中的拼写错误

答案 1 :(得分:0)

您需要将正确的日期格式传递给函数。

  

2015年7月29日星期三12:10:49 GMT + 0100(GMT夏令时间)

警告(timeSince('2015年7月29日12:10:49 GMT + 0100(GMT夏令时间)'));

您可以使用new Date()

来解决此问题

您还需要对函数调用执行某些操作以查看/使用返回的数据,我将在下面显示几个示例。

警报结果

window.onload=function(){
var a = new Date();
alert(timeSince(a.setTime(a.getTime() - 150000)));
}
// 
var timeSince = function(date) {
if (typeof date !== 'object') {date = new Date(date);}
var seconds = Math.floor((new Date() - date) / 1000);
var intervalType;
var interval = Math.floor(seconds / 31536000);
if(interval >= 1){intervalType = 'year';
}else{interval = Math.floor(seconds / 2592000);
if (interval >= 1){intervalType = 'month';
}else{interval = Math.floor(seconds / 86400);
if(interval >= 1) {intervalType = 'day';
}else{interval = Math.floor(seconds / 3600);
if(interval >= 1) {intervalType = "hour";
}else{interval = Math.floor(seconds / 60);
if(interval >= 1) {intervalType = "minute";
}else{
interval = seconds;intervalType = "second";
}}}}}
if (interval > 1 || interval === 0){intervalType += 's';}
return interval + ' ' + intervalType;
};

将结果应用于现有元素

  • 的getElementById()
  • 的innerHTML

window.onload=function(){
document.getElementById('example').innerHTML=timeSince('Wed Jul 29 2015 12:10:49 GMT+0100 (GMT Summer Time)');
}
// 
var timeSince = function(date) {
if (typeof date !== 'object') {date = new Date(date);}
var seconds = Math.floor((new Date() - date) / 1000);
var intervalType;
var interval = Math.floor(seconds / 31536000);
if(interval >= 1){intervalType = 'year';
}else{interval = Math.floor(seconds / 2592000);
if (interval >= 1){intervalType = 'month';
}else{interval = Math.floor(seconds / 86400);
if(interval >= 1) {intervalType = 'day';
}else{interval = Math.floor(seconds / 3600);
if(interval >= 1) {intervalType = "hour";
}else{interval = Math.floor(seconds / 60);
if(interval >= 1) {intervalType = "minute";
}else{
interval = seconds;intervalType = "second";
}}}}}
if (interval > 1 || interval === 0){intervalType += 's';}
return interval + ' ' + intervalType;
};
<div id="example"></div>

我希望这会有所帮助。快乐的编码!