startOf 、endOf 作用:顾名思义 - - 以什么开始,以什么结尾,用来获取任意日期的任意精确值,例如:获取今天精确到小时的日期、精确到秒的日期等等类似的情况
先来看语法
moment().startOf(String);
moment().endOf(String);
再来看官方给的案例
startOf --- >
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); 相同
endOf --- >
moment().endOf("year"); // 将 moment 设置为今年的 12 月 31 日 23:59:59.999
看到这大家是不是都有点替endOf 愤愤不平了,moment官网为啥这次案例大部分都给了startOf 呢 ,endOf 就不是自己娃了?真的是偏心的我们这些读者都有点看不下去了…
不过我觉得有可能是官网觉得这两个方法相似度太高了,但是大家又好奇怎么用,以及是啥效果,所以就给了个案例让我们开开眼,不至于看完这两个方法后对startOf 熟悉了,对endOf 还处于迷迷茫茫的一个状态。
如果看完前面的官方案例还是觉得有点不清楚的话就一起看看下面的案例吧
startOf --- >
moment().startOf('hour'); // Tue May 31 2022 16:00:00 GMT+0800 (中国标准时间)
moment().startOf('minte'); // Tue May 31 2022 16:32:00 GMT+0800 (中国标准时间)
moment().startOf('second'); // Tue May 31 2022 16:34:22 GMT+0800 (中国标准时间)
endOf --- >
moment().endOf('hour'); // Tue May 31 2022 16:59:59 GMT+0800 (中国标准时间)
moment().endOf('minte'); // Tue May 31 2022 16:38:59 GMT+0800 (中国标准时间)
moment().endOf('second'); // Tue May 31 2022 16:38:23 GMT+0800 (中国标准时间)
解析:
1、startOf 为获取指定参数的起始时间,例如:moment().startOf(‘hour’); 获取的就是今天准确的小时的第一分钟,除了小时,其余参数用00补齐
2、endOf 为获取指定参数的结束时间,例如:moment().startOf(‘hour’); 获取的就是今天准确的小时的最后一分钟,除了小时,其余参数用59补齐
总结:两个方法都是你给我传什么参数,我(moment)就给你精确 到什么参数,其余的参数对于startOf 来说全部用00补齐,对于endOf 来说全部用59补齐
好啦,方法的介绍到这就结束啦,其他的没有什么了
有些看过我moment系列一的道友在代码测试的时候可能会因为
moment().startOf('week'); // Mon May 30 2022 00:00:00 GMT+0800 (中国标准时间)
或
moment().startOf('isoWeek'); // Mon May 30 2022 00:00:00 GMT+0800 (中国标准时间)
这个对我系列一的文章产生疑惑,以下是系列一的情景:
大家好奇的点可能在这,理论上moment().startOf(‘week’) 这个代码按我总结的来说输出的应该是这周的第一天,结合我系列一的文章来说,程序输出的应该是周日,而不是打印的周一。对此大家可以看到上面所有案例的输出结果结尾都带有"(中国标准时间)",结合下面这个案例
moment().startOf("week").day(); // 1
moment().endOf("week").day(); // 0
这就解释的通了,如果程序也是从周一开始周日结束的话,那moment().endOf(“week”).day(); 打印输出的应该是7才对,这里打印的是0,所以说明程序的日期计算是按国外的日期计算来的,显示是按我们中国地区的时间显示。
以上仅个人理解,若有误,望指正!以免误导其他道友