巧用 moment.js 来处理各种时间

无论什么项目,时间格式化都是非常常规的需求。而 moment.js 这个库真的非常好用,能够满足绝大部分对于时间处理的行为。

各种时间格式化

moment().format();                                // "2014-09-08T08:02:17-05:00" (ISO 8601,无小数秒钟)
moment().format("dddd, MMMM Do YYYY, h:mm:ss a"); // "Sunday, February 14th 2010, 3:25:50 pm"
moment().format("ddd, hA");                       // "Sun, 3PM"
moment('gibberish').format('YYYY MM DD');         // "Invalid date"

moment('10:00:00', 'HH:mm')

计算某天到几天的天数

const dayDiff = moment(date)
        .startOf('day')const dayDiff = moment(date)
        .startOf('day')

指定某天的输出方式

moment().calendar(null, {
    sameDay: '[今天]',
    nextDay: '[明天]',
    nextWeek: 'dddd',
    lastDay: '[昨天]',
    lastWeek: '[上个] dddd',
    sameElse: 'DD/MM/YYYY'
});

isBefore & isSame & isAfter

moment('2010-10-20').isBefore('2010-10-21'); // true
moment('2010-10-20').isBefore('2010-12-31', 'year'); // false
moment('2010-10-20').isBefore('2011-01-01', 'year'); // true
moment('2010-10-20').isSame('2010-01-01', 'year');  // true
moment('2010-10-20').isAfter('2010-10-19'); // true

clone moment

moment.duration().clone();

获取加减时间后的结果

moment().add(7, 'days');
moment().add(7, 'days').add(1, 'months'); // 链式
moment().subtract(7, 'days');

说去某个时间点的开始和结束时间

moment().startOf('year');    // 设置为今年一月1日上午 12:00
moment().startOf('month');   // 设置为本月1日上午 12:00
moment().startOf('quarter');  // 设置为当前季度的开始,即每月的第一天上午 12:00
moment().startOf('week');    // 设置为本周的第一天上午 12:00
moment().startOf('isoWeek'); // 根据 ISO 8601 设置为本周的第一天上午 12:00
moment().startOf('day');     // 设置为今天上午 12:00
moment().startOf('date');     // 设置为今天上午 12:00
moment().startOf('hour');    // 设置为当前时间,但是 0 分钟、0 秒钟、0 毫秒
moment().startOf('minute');  // 设置为当前时间,但是 0 秒钟、0 毫秒
moment().startOf('second');  // 与 moment().milliseconds(0); 相同
moment().endOf("year");

最后

推荐仔细看看 moment.js 的文档 http://momentjs.cn/
,有很多关于时间处理的小功能。很可能在之后的开发工作中就用上了。