基于 date-fns 封装 utils

getTimestamp

获取当前时间或者某个时间的秒级时间戳

import {getUnixTime} from 'date-fns';/*** @author zxyue25* @desc 获取当前时间或者某个时间的秒级时间戳;* 如果入参是毫秒秒级时间戳(13位), 则去除最后三位1000返回毫秒级(13位)时间戳;主要场景在前端需要入参拿秒级时间戳给后端作为入参* @param date - Date | Number* @returns 返回格式化后的秒级时间戳 - Number* @example**/export const getTimestamp = (date: number | Date = new Date()): number => getUnixTime(date);

getMilliTimestamp

获取当前时间或者某个时间的毫秒级时间戳

import {getTime} from 'date-fns';/*** @author zxyue25* @desc 获取当前时间或者某个时间的毫秒级时间戳;* 如果入参是秒级时间戳(10位), 则乘以1000返回毫秒级(13位)时间戳;主要场景在server返回了秒级时间戳, 前端先乘以1000转换成日期展示* TODO:这里传入了其他数字怎么处理?直接返回还是补齐13位返回?date-fns是直接返回, 建议直接返回* @param date - Date | Number* @returns 返回格式化后的毫秒级时间戳 - Number*/
export const getMilliTimestamp = (date?: number | Date): number => {if (!date) {return getTime(new Date());} else {if (date instanceof Date) {return getTime(date);} else {if (date.toString().length === 10) {return getTime(date * 1000);} else {return date;}}}
};

formatDate

将时间戳转换为指定格式的日期;入参可以是秒级时间戳、毫秒级时间戳;

import {format} from 'date-fns';/*** @author zxyue25* @desc 将时间戳转换为指定格式的日期;入参可以是秒级时间戳、毫秒级时间戳;* 如果入参是秒级时间戳(10位), 会乘以1000转换;格式默认为'yyyy-MM-dd HH:mm';* 主要场景:通常情况下时间戳转换日期不传格式, 而是用默认格式;后端返回的时间戳一般是秒级时间戳, 如果直接用date-fns需要自己乘1000传入* @param date - Date | Number* @param formatStr - String* @returns 返回格式化后的秒级时间戳 - Number* @example*/export const formatDate = (date: number | Date, formatStr = 'yyyy-MM-dd HH:mm') => {if (typeof date === 'number' && date.toString().length === 10) {return format(date * 1000, formatStr);} else {return format(date, formatStr);}
};

formatDateRange

将两个时间戳或者Date日期转换为指定格式的日期, 并用指定连接符连接;

import {formatDate} from './formatDate';/*** @author zxyue25* @desc 将两个时间戳或者Date日期转换为指定格式的日期, 并用指定连接符连接;* 入参可以是秒级时间戳、毫秒级时间戳或者Date日期;如果入参是秒级时间戳(10位), 会乘以1000转换;* 格式默认为`${yyyy/MM/dd} - `${yyyy/MM/dd}';如果想更改格式, 可传入第三个参数(日期的格式), 第四个参数(连接符的格式)* @param startDate - Date | Number* @param endDate - Date | Number* @param formatStr - String 默认格式'yyyy/MM/dd'* @param joinStr - String 默认连接符'-'* @returns 返回格式化后的日期区间字符串* @example*/export const formatDateRange = (startDate: number | Date,endDate: number | Date,formatStr = 'yyyy/MM/dd',joinStr = '-',
) => `${formatDate(startDate, formatStr || 'yyyy/MM/dd')} ${joinStr} ${formatDate(endDate, formatStr || 'yyyy/MM/dd')}`;

formatDateDistance

获取指定时间距离当前时间或者指定时间多远

import {formatDistance} from 'date-fns';import {getMilliTimestamp} from './getMilliTimestamp';
import {LANGUAGE_DATE_FNS_MAP} from './locale';/*** @author zxyue25* @desc 获取指定时间距离当前时间或者指定时间多远;* @param date - Date | Number* @param baseDate - Date | Number, 默认为当前时间* @param options - 扩展项, 可以配置语言, 有两种方式:传入语言类型lang;或者直接传入Locale;* @returns 返回描述“指定时间距离当前时间或者指定时间多远”的字符串, 有多语言处理* @example*/type OptionType = {locale?: Locale;addSuffix?: boolean;lang?: keyof typeof LANGUAGE_DATE_FNS_MAP;
};export const formatDateDistance = (date: Date | number = 0,baseDate: Date | number = new Date(),options?: OptionType,
): string => {const initOptions = {addSuffix: options?.addSuffix || true,locale: options?.locale || LANGUAGE_DATE_FNS_MAP[options?.lang || 'en'],...options,};if ((typeof date === 'number' && date.toString().length === 10) ||(typeof baseDate === 'number' && baseDate.toString().length === 10)) {return formatDistance(getMilliTimestamp(date), getMilliTimestamp(baseDate), initOptions);}return formatDistance(date, baseDate, initOptions);
};

formatDateDuration

将指定秒转为‘H小时M分钟S秒’, H、M、S为0时, 默认不展示;如果想更改格式可传入第二个扩展参数options

import {formatDuration} from 'date-fns';import {LANGUAGE_DATE_FNS_MAP} from './locale';/*** @author zxyue25* @desc 将指定秒转为‘H小时M分钟S秒’, H、M、S为0时, 默认不展示;如果想更改格式可传入第二个扩展参数options* @param second - Number, 多少秒* @param options - 扩展项, 可以配置语言, 有两种方式:传入语言类型lang;或者直接传入Locale;* @returns 返回描述“H小时M分钟S秒”的字符串, 有多语言处理* @example*/type OptionType = {locale?: Locale;zero?: boolean;delimiter?: string;format?: Array<string>;lang?: keyof typeof LANGUAGE_DATE_FNS_MAP;
};export const formatDateDuration = (second: number, options?: OptionType) => {const hours = Math.floor(second / 3600);const minutes = Math.floor((second % 3600) / 60);const seconds = Math.floor(second % 60);return formatDuration({hours,minutes,seconds,},{zero: options?.zero || false,locale: options?.locale || LANGUAGE_DATE_FNS_MAP[options?.lang || 'en'],...options,},).replace(/ /g, '');
};

基于 date-fns 封装 utils相关推荐

  1. 基于vue element-ui 封装上传图片组件 功能:上传,删除,预览,上传图片水印,拖拽排序,上传进度条等

    学习目标: 我们在开发后台时肯定避免不了上传图片的功能 例如: 上传图片回显 上传完成 : 预览查看 , 删除等 如果是图片列表,还可能让你拖动图片排序 有的后台项目可能要给图片添加水印,添加标记 有 ...

  2. 最简单的基于FFMPEG的封装格式转换器(无编解码)

    2019独角兽企业重金招聘Python工程师标准>>> 本文介绍一个基于FFMPEG的封装格式转换器.所谓的封装格式转换,就是在AVI,FLV,MKV,MP4这些格式之间转换(对应. ...

  3. php连接数据库封装函数,PHP基于MySQLI函数封装的数据库连接工具类【定义与用法】...

    本文实例讲述了PHP基于MySQLI函数封装的数据库连接工具类.分享给大家供大家参考,具体如下: mysql.class.php: class mysql { private $mysqli; pri ...

  4. Django框架之DRF 基于mixins来封装的视图

    阅读目录 基础视图 基于mixins来封装的视图 mixins封装再封装,第三种方法 第四种写法,再次封装,全部写在一个类中 基础视图 示例环境搭建:新建一个Django项目,连接Mysql数据库,配 ...

  5. 原生JS基于window.scrollTo()封装垂直滚动动画工具函数

    概要: 原生JS基于window.scrollTo()封装垂直滚动动画工具函数,可应用与锚点定位.回到顶部等操作. ####封装原因: 在vue项目中,遇到需要实现垂直滚动效果的需求,初步想到的方法有 ...

  6. 基于AFNetworking的封装的工具类

    基于AFNetworking的封装的工具类MXERequestService // // MXERequestService.h // testAFNetWorking // // Created b ...

  7. dio设置自定义post请求_基于dio库封装flutter项目的标准网络框架

    网络框架是每个应用的基石,封装一个好的网络框架不仅是项目的一个好的开始,并且直接影响到随后项目的稳定性和可扩展性.在移动开发的各个端都有非常赞的网络请求基础框架,比如Android的okhttp库.s ...

  8. 初探 amaze-vue( 基于vue.js封装的Amaze UI 组件库)

    Amaze UI 是以移动优先(Mobile first)为理念,面向 HTML5 开发的国产优秀组件库.因官方未提供vue.js版本,而且民间一直对vue.js版本的 Amaze UI 组件库呼声很 ...

  9. 最简单的基于FFmpeg的封装格式处理:视音频分离器(demuxer)

    ===================================================== 最简单的基于FFmpeg的封装格式处理系列文章列表: 最简单的基于FFmpeg的封装格式处理 ...

最新文章

  1. Rstudio查看关联的R
  2. python中and与or的执行顺序-python 代码运行顺序问题?
  3. hadoop学习--数据排序
  4. leetcode 150. 逆波兰表达式求值(栈)
  5. typedef 数组使用详解
  6. 最常见并发面试题整理!(速度收藏)
  7. Ubuntu MySQL 配置 time_zone
  8. yii php 弹窗,Yii框架弹出框功能示例
  9. 计算机无法用630打印机,手把手为你解决win10系统安装630k打印机驱动的设置方法...
  10. pdf文档怎么转换成word格式,pdf转word的方法
  11. android 分区 加密软件,VeraCrypt(硬盘分区加密软件)
  12. vue图片加载不出来的问题
  13. 苹果手机和安卓手机分享的区别
  14. 大屏联屏发布系统解决方案
  15. react 监听键盘事件及多按键事件
  16. Android8.0 系统启动之孵化准备
  17. Java有关集合的练习
  18. 地产“罗生门”:是世茂“不讲武德”,还是福晟“谎话连篇”?
  19. Unity点击物体后,移动到物体所在位置
  20. 学雷锋做好事留名是发挥正能量的勇气!

热门文章

  1. lucene-使用lius解析pdf、ppt、rtf、txt、xml
  2. WindowBuilder的使用
  3. 强连通分量算法学习笔记
  4. 基于某大学的论文系统的开发实例分析
  5. Xampp浏览html证书错误,IE打开https网站localhost时,取消证书问题提示(示例代码)
  6. 关于VB里的ScaleMode问题
  7. 漫画:一看就能学会的人工智能简史
  8. 华为云如何赋能无人车飞驰?从这群AI热血少年谈起
  9. ruduce用起来原来这么爽
  10. Unity接入日志插件Log4Net