自己编写的,有不当之处欢迎指出.
/**
* getAgoFromDate.js
* 把 日期对象 转化成 ...之前 的形式
* @param {日期对象} 需要计算的日期对象.
* @return {字符串} 返回多久之前.
* 返回格式如:刚刚、1分钟以前、1小时以前、1天以前、1月以前、1年以前
*/
function getAgoFromDate(d) {
var iNow = +new Date,
iThat = +d,
iDiff = iNow - iThat,
iMin = 60 * 1000,
iHour = 60 * iMin,
iDay = 24 * iHour,
iMonth = 30 * iDay,
iYear = 365 * iDay;
// 一分钟内
if (iDiff < iMin) {
return "刚刚";
}
// 一小时内按分钟算
if (iDiff < iHour) {
return [
Math.floor(iDiff / iMin),
"分钟之前"
].join("");
}
// 一天内按小时算
if (iDiff < iDay) {
return [
Math.floor(iDiff / iHour),
"小时之前"
].join("");
}
// 一月之内按天
if (iDiff < iMonth) {
return [
Math.floor(iDiff / iDay),
"天之前"
].join("");
}
// 一年之内按月
if (iDiff < iYear) {
return [
Math.floor(iDiff / iMonth),
"月之前"
].join("");
}
//1年以前
else {
return [
Math.floor(iDiff / iYear),
"年之前"
].join("");
}
}
// node的模块写法
module.exports = getAgoFromDate;
附单元测试代码
/**
* getAgoFromDate.test.js
* Mocha nodejs测试框架
*/
var dateToString = require('./getAgoFromDate.js'),
expect = require('chai').expect,
iMin = 1000 * 60,
iHour = iMin * 60,
iDay = iHour * 24,
iMonth = iDay * 30,
iYear = iDay * 365;
describe('指定的 日期对象 转 中文 多久之前 字符串 的测试: ', function() {
it('刚刚 的测试', function() {
expect(dateToString(new Date(new Date - iMin / 2))).to.be.equal('刚刚');
});
it('2分钟 的测试', function() {
expect(dateToString(new Date(new Date - iMin * 2))).to.be.equal('2分钟之前');
});
it('2小时 的测试', function() {
expect(dateToString(new Date(new Date - iHour * 2))).to.be.equal('2小时之前');
});
it('2天 的测试', function() {
expect(dateToString(new Date(new Date - iDay * 2))).to.be.equal('2天之前');
});
it('2月 的测试', function() {
expect(dateToString(new Date(new Date - iMonth * 2))).to.be.equal('2月之前');
});
it('2年 的测试', function() {
expect(dateToString(new Date(new Date - iYear * 2))).to.be.equal('2年之前');
});
})