虽然moment.js是一个三方库,但是没转化成自己的知识储备的话,在使用起来再去查也是费时费力。为了处理项目中关于时间和日期的问题,就把自己碰到的问题进行一个总结。
做管理系统,和moment.js打交道真的是家常便饭,原来一直都是按照antd
库的示例粘贴过来,但是今天遇到一个问题,才发现并没有对它有过深入的了解。
今天开始写总结,后续会在不同的需求中继续补充。
moment.js 中文网地址 http://momentjs.cn/docs/#/parsing/now
Moment.js 使用重载的 getter 和 setter 方法。 此模式类似与其在 jQuery 中的使用。
**
取值/赋值
** 不带参数调用这些方法会作为 getter,而带参数调用则会作为 setter。
1.会有一些封装好的方法用来get值
例:moment().month(Number|String); 获取或设置月份 年/月/日/时/分/秒/季等调用不同的api
2.字符串 getter
moment().get(unit) === moment()unit
例:moment().get(‘month’); // 0 至 11
3.moment的set方法
moment().set(String, Int);
moment().set(Object(String, Int));
例:moment().set({‘year’: 2013, ‘month’: 3});
问题1 :如果获取某一个给定日期的月份 ‘2022-11-28’如何获取 当前日期的月份 11 ?
const date = '2022-11-28';
根据方法1 const month = moment(date).get('month') + 1;
根据方法2 const month = moment(date).month + 1;
console.log(month); //11
显示
moment().format(); 它接受一串令牌并将其替换为其相应的值。
moment().format(‘YYYY-MM-DD HH:mm’)
比如antd中的示例
'date-picker': fieldsValue['date-picker'].format('YYYY-MM-DD'),`
操作
moment().add(Number, String);可以为现有的 moment 增加时间。
若要增加时间,则传入要增加的时间的键、以及要增加的数量。
例:moment().add(7, ‘days’);
moment().endOf(String);
例:moment().endOf(“year”); // 将 moment 设置为今年的 12 月 31 日 23:59:59.999
在前几天做了一个自定义DatePicker日期的操作,antd并未提供单独的DatePicker增加自定义时间范围的API,所以我做在了页脚,使用了moment的add方法
<DatePicker
open={pickerstatus} //antd官网提供的控制弹层是否展开的方法
onOpenChange={status => { //antd官网提供的弹出日历和关闭日历的回调
if (!status) {
setPickerstatus(false)
}}}
onClick={()=>{setPickerstatus(true)}}
showToday={false}
renderExtraFooter={() => (
<div>
<Button onClick={() => dateChange('1month')}>1个月</Button>
<Button onClick={() => dateChange('3month')}>3个月</Button>
<Button onClick={() => dateChange('1year')}>1年</Button>
</div>
)}
disabledDate={(current)=>{
return current && current < moment().endOf('day');
//moment().endOf("da"); // 将 moment 设置为今年的 12 月 31 日 23:59:59.999
}}
/>
const dateChange = (dateTip) => {
switch (dateTip) {
case '1month':
form.setFieldsValue({ limitTime: moment(moment().add(1, 'months').format("YYYY-MM-DD")) })
break;
case '3month':
form.setFieldsValue({ limitTime: moment(moment().add(1, 'quarters').format("YYYY-MM-DD")) })
break;
case '1year':
form.setFieldsValue({ limitTime: moment(moment().add(1, 'years').format("YYYY-MM-DD")) })
break;
default:
break;
}
setPickerstatus(false)
}