首页 热点资讯 义务教育 高等教育 出国留学 考研考公
您的当前位置:首页正文

一个把 日期对象 转化成 ...之前 形式的函数

2024-12-20 来源:化拓教育网

自己编写的,有不当之处欢迎指出.


/**
 * 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年之前');
    });
})

显示全文