Javascript 使用筛选器以自定义格式设置日期的格式

Javascript 使用筛选器以自定义格式设置日期的格式,javascript,angularjs,mongodb,date,Javascript,Angularjs,Mongodb,Date,我正在尝试在我的angular应用程序上用自定义格式显示一些日期:我想看看“1小时前”、“2天前”。。。而不是实际的时间,所以我想用过滤器来做这件事 我的日期存储在MongoDb中,因此我将其作为ISODate接收: ISODate("2014-03-13T10:48:02.991Z") 基本上,我希望将此功能应用于我的日期: function timeSince(ts){ now = new Date(); ts = new Date(ts*1000); var de

我正在尝试在我的angular应用程序上用自定义格式显示一些日期:我想看看“1小时前”、“2天前”。。。而不是实际的时间,所以我想用过滤器来做这件事

我的日期存储在MongoDb中,因此我将其作为ISODate接收:

ISODate("2014-03-13T10:48:02.991Z")
基本上,我希望将此功能应用于我的日期:

function timeSince(ts){
    now = new Date();
    ts = new Date(ts*1000);
    var delta = now.getTime() - ts.toString().getTime();

    delta = delta/1000; //us to s

    var ps, pm, ph, pd, min, hou, sec, days;

    if(delta<=59){
        ps = (delta>1) ? "s": "";
        return delta+" second"+ps
    }

    if(delta>=60 && delta<=3599){
        min = Math.floor(delta/60);
        sec = delta-(min*60);
        pm = (min>1) ? "s": "";
        ps = (sec>1) ? "s": "";
        return min+" minute"+pm+" "+sec+" second"+ps;
    }

    if(delta>=3600 && delta<=86399){
        hou = Math.floor(delta/3600);
        min = Math.floor((delta-(hou*3600))/60);
        ph = (hou>1) ? "s": "";
        pm = (min>1) ? "s": "";
        return hou+" hour"+ph+" "+min+" minute"+pm;
    } 

    if(delta>=86400){
        days = Math.floor(delta/86400);
        hou =  Math.floor((delta-(days*86400))/60/60);
        pd = (days>1) ? "s": "";
        ph = (hou>1) ? "s": "";
        return days+" day"+pd+" "+hou+" hour"+ph;
    }

}
功能时间间隔(ts){
现在=新日期();
ts=新日期(ts*1000);
var delta=now.getTime()-ts.toString().getTime();
delta=delta/1000;//从us到s
var ps、pm、ph、pd、分钟、小时、秒、天;
如果(delta1)?“s”:“s”;
返回增量+秒+秒
}
如果(增量>=60&&delta1)?“s”:“s”;
ps=(秒>1)?“s”:“s”;
返回分钟+分钟+下午+秒+秒+秒;
}
如果(增量>=3600&&delta1)?“s”:“s”;
pm=(最小值>1)?“s”:“s”;
返回时间+“小时”+ph+“+min+“分钟”+pm;
} 
如果(增量>=86400){
天数=数学下限(增量/86400);
hou=数学楼层((增量-(天*86400))/60/60);
pd=(天>1)?“s”:“s”;
ph=(侯>1)?“s”:“;
返回天数+“天”+pd+“+侯”+“小时”+ph;
}
}
我如何简单地使用过滤器做到这一点


谢谢

您正在寻找基本的角度过滤器模板吗? 这就是使用角度过滤器包装代码的方式

angular.module('MyModule', []).
  filter('timeSince', function() {
    return function(input) {

    var now = new Date();
    var ts = new Date(input);
    var delta = now.getTime() - ts.toString().getTime();

    delta = delta/1000; //us to s

    var ps, pm, ph, pd, min, hou, sec, days;

    if(delta<=59){
        ps = (delta>1) ? "s": "";
        return delta+" second"+ps
    }

    if(delta>=60 && delta<=3599){
        min = Math.floor(delta/60);
        sec = delta-(min*60);
        pm = (min>1) ? "s": "";
        ps = (sec>1) ? "s": "";
        return min+" minute"+pm+" "+sec+" second"+ps;
    }

    if(delta>=3600 && delta<=86399){
        hou = Math.floor(delta/3600);
        min = Math.floor((delta-(hou*3600))/60);
        ph = (hou>1) ? "s": "";
        pm = (min>1) ? "s": "";
        return hou+" hour"+ph+" "+min+" minute"+pm;
    } 

    if(delta>=86400){
        days = Math.floor(delta/86400);
        hou =  Math.floor((delta-(days*86400))/60/60);
        pd = (days>1) ? "s": "";
        ph = (hou>1) ? "s": "";
        return days+" day"+pd+" "+hou+" hour"+ph;
    }

    return "-";
    };
  });
angular.module('MyModule',[])。
过滤器('timeSince',函数(){
返回函数(输入){
var now=新日期();
var ts=新日期(输入);
var delta=now.getTime()-ts.toString().getTime();
delta=delta/1000;//从us到s
var ps、pm、ph、pd、分钟、小时、秒、天;
如果(delta1)?“s”:“s”;
返回增量+秒+秒
}
如果(delta>=60&&delta1)?“s”:“;
ps=(秒>1)?“s”:“s”;
返回分钟+分钟+下午+秒+秒+秒;
}
如果(delta>=3600&&delta1)?“s”:“;
pm=(最小值>1)?“s”:“;
返回时间+“小时”+ph+“+min+“分钟”+pm;
} 
如果(增量>=86400){
天数=数学下限(增量/86400);
hou=数学楼层((增量-(天*86400))/60/60);
pd=(天>1)?“s”:“s”;
ph=(侯>1)?“s”:“;
返回天数+“天”+pd+“+侯”+“小时”+ph;
}
返回“-”;
};
});
在markup中使用:Time-since:{{此_应该是(来自)模型| timeSince}的(ISODate)}

您只需要创建一个返回该函数的函数

myModule.filter('prettyTime', function(){

   return function(ts){
      //Your code here
   };

});
假设您在
$scope
的某个地方有一些日期对象:

<span>{{time | prettyTime}}</span>
{{time | prettyTime}
这是一个有效的演示:

使用,简单如下:

App.filter('ago', function(){
  return function(epoch){
    var diff = Date.now() - parseInt(epoch,10);
    return moment.duration(diff).humanize() + ' ago';
  };
});

编辑:矩还将解析各种ISO类型,请参见文档

用法如@Josh所述:

<span>{{ time | ago }}</span>
{{time | ago}

如果您不打算自己做这件事,那么