moment.js 常用用法

作者: , 共 2318 字 , 共阅读 0

其实moment.js 官方主页已经很详细和清晰了,这里做一下笔记加强记忆。

1、初始化和格式化

var now = new moment();  // 获取当前时间,注意必须要用new。
var date1 = moment(20200101, "YYYYMMDD");
var date2 = moment("2020-01-01", "YYYY-MM-DD");
var date3 = moment("20200101");
var date4 = moment(2020, 1, 1);

初始化和格式化语法是一致的:

date1.format("YYYY年M月D日")
date2.format("hhmmss")

常用的格式控制符有: YYYY、YY (两位数年份)、MM (两位数月份,不足添加 0 )、M (月份)、MMM (英文月份简写)、DD (两位数日期)、D、hh ( 12 小时制)、HH ( 24 小时制)、mm、ss、SSS (毫秒)、X (秒时间撮)、x (毫秒时间撮)。

2、获取和设置年月日等值

moment.js 获取和设置使用同一个函数,不带参数表示获取,带参数表示设置。

var year = date.year();
var month = date.month(); // 注意从0开始!
var day = date.date();    // 注意是date(),不是day(),从0开始!

var weekday = date.day(); // 注意和date()区别!0到6,周日为0。
var weekday = date.isoWeekday(); // 1到7,周日为7。
var hour = date.hours();
var minute = date.minutes();
var second = date.seconds();

3、调整日期和时间

主要是 add 和 subtract 两个函数。

var newDate = date.add(1, 'years');
var newDate = date.subtract(1, 'months');

第二个函数的周期支持: years, months, days, hours, minutes, seconds。

4、时间差

主要是 diff 函数,第二个参数参考上面的周期。

var ms = date1.diff(date2);            // 默认返回毫秒
var days = date1.diff(date2, "days");  // 可以指定周期

还有一个特殊的 fromNow 函数,用可读文字显示离当前时间的差异:

var diff = moment.add(1, "days").fromNow();         // in a day
var diff = moment.subtract(2, "months").fromNow();  // 2 months ago

5、获取一个周期的开始结束日期(包括时间)

比如获取一年的第一天和一个月的最后一天:

date.startOf('year');
date.endOf('month');

参数支持: year, month, week(周日为一周开始), isoWeek (周一为一周开始), day。

一个例子,判断是否为当年的最后一天:

var date = moment("20200101", "YYYYMMDD");
date == date.endOf("year").startOf("day");

6、比较

注意不能直接用==, >, < 等比较符号。为什么?还不知道。

//之前
moment('2010-10-20').isBefore('2010-10-21'); // true
//相同
moment('2010-10-20').isSame('2010-10-20'); // true
//之后
moment('2010-10-20').isAfter('2010-10-19'); // true
moment('2010-10-20').isSameOrBefore('2010-10-20'); // true
moment('2010-10-20').isSameOrAfter('2010-10-20'); // true
//之间
moment('2010-10-20').isBetween('2010-10-19', '2010-10-25'); // true

上面所有函数还支持指定比较力度,比如 year, month, day。指定 year 表示只比较年份,指定 day 表示比较年月日(不比较具体的时间了):

moment1.isSame(moment2, "year");

Q. E. D.

类似文章:
datetime 是 Python 的标准库:
最近用 Matlab 写了个东西,运行效率不如我意。用 Profiler 跟踪了一下,结果让我大吃一惊。其中三分之一的时间花费在 datestr 这个函数上,六分之一的时间花费在 save 和 load 数据上。这里先谈前一个问题,关于 save 和 load 的效率以后再谈。
风险管理 » VaR Primer
VaR 衡量一个投资的收益的分位点,衡量未来在一定概率上的损失情况,但某些时候还不够,比如说卖出一个深度价外期权,它的 VaR 为 0 ,但这不代表它没有风险。这类风险被称为尾部风险,可以用 ES 来衡量。
编程 » Excel, VBA
VBA 的 Date 类型比较奇怪。
最近做社会实践项目遇到的一个问题,需要动态修改一个表格。本来以为要想修改一行,直接设置新的 tr.innerHTML 即可。后来发现在 Firefox 下可行,但在 IE 下通不过,查看了一下帮助,才发现 innerHTML 还没有一个通用标准,而在 IE 下innerHTML对于标签为 COL, COLGROUP, FRAMESET, HTML, STYLE, TABLE, TBODY, TFOOT, THEAD, TITLE, TR 的元素是只读的。要想在 IE 下动态修改表格,只能使用 insertRow 和 insertCell;
前一篇:
IT » GIT
GIT 的一个很大的问题是没有权限划分,所有人对项目下所有东西都有(查看)权限(只能设置分支的推送权限),无法对特定文件和文件夹设置单独的权限。这个功能只能借用 SUBMODULE 来实现。
主要形式是下面三种。后面两种实际指向同一个位置(如果path是一个已存在的文件夹),但处理结果会有所差异。