持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第27天,点击查看活动详情
new Date() 存在的问题
new Date()的使用语法:
new Date();
new Date(value);
new Date(dateString);
new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]]);
放在这儿意思意思就好了,本来写的bug就够多了,就不去自增了,只因它的魔幻:
- 不可靠,输入的参数格式不同可能就会导致结果完全不同
new Date("2022-10-28") // 2022-10-28T00:00:00.000Z 🙂
new Date(2022, 10, 28) // 2022-11-27T16:00:00.000Z 🙃
- 没有用于计算日期的
API,比如时间之间的加减运算 - 没有切换时区的
API - 不支持各国自己的历法,比如我们的
农历
为什么是 date-fns
- moment.js
- 优点
- 是一个大而全的时间日期库
- 早在2011年就开始被使用,受众广泛
- 缺点
moment对象过于臃肿,包的大小有280.9 kB,且不支持打包工具的tree-shaking- 对于原生
Date对象存在侵入性的修改,返回的对象是可变的 - 官方已停止开发,进入维护状态
- 优点
- day.js
API与Moment.js有 9 成以上相似,学习成本低- 相比
moment.js,体积更小,仅有2kb大小
- date-fns
- 支持按需引入需要的模块,支持
tree-shaking - 总是返回新的日期对象,输出不可变
- 支持按需引入需要的模块,支持
格式化日期
/* 语法
format(date: number | Date, format: string, options?: {
locale?: Locale | undefined; // locale为中国时间
weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | undefined;
firstWeekContainsDate?: number | undefined;
useAdditionalWeekYearTokens?: boolean | undefined;
useAdditionalDayOfYearTokens?: boolean | undefined;
} | undefined): string
*/
format(new Date(), "yyyy-MM-dd HH:mm:ss", { locale: zhCN }); // 2022-10-28 11:38:44
format(new Date(), "yyyy-MM-dd HH:mm:ss"); // 2022-10-28 11:38:44
format(new Date(), "yyyy-MM-dd"); // 2022-10-28
format(new Date(), "HH:mm:ss"); // 11:38:44
计算某天加减多少天数是哪一天
/* 语法
addDays(date: number | Date, amount: number): Date
*/
addDays(new Date(), 1) // Sat Oct 29 2022 11:47:07 GMT+0800 (中国标准时间)
addDays(new Date(), -1) // Thu Oct 27 2022 11:47:07 GMT+0800 (中国标准时间)
同样用法的还有:
addMonths():几个月后的日期addHours():几个小时后的日期addMinutes():几分钟后的日期addWeeks():几周后的日期
计算两个时间之间相差的天数
/* 语法
differenceInDays(dateLeft: number | Date, dateRight: number | Date): number
*/
differenceInDays(new Date("2022-10-28"), new Date("2021-10-1")) // 27
同样用法的还有:
differenceInMonths():计算两个时间之间相差的月份differenceInYears():计算两个时间之间相差的年数differenceInHours():计算两个时间之间相差的小时differenceInWeeks():计算两个时间之间相差的周数
将字符串形式的日期转换成Date格式的日期
/*语法
parseISO(argument: string, options?: {
additionalDigits?: 0 | 1 | 2 | undefined;
} | undefined): Date
*/
parseISO("2022-10-28"); // Fri Oct 28 2022 00:00:00 GMT+0800 (中国标准时间)