【Vue】日期格式化(全局)

系列文章

【Vue】vue增加导航标签
本文链接:https://blog.csdn.net/youcheng_ge/article/details/134965353

【Vue】Element开发笔记
本文链接:https://blog.csdn.net/youcheng_ge/article/details/133947977

【Vue】vue,在Windows IIS平台部署
本文链接:https://blog.csdn.net/youcheng_ge/article/details/133859117

【Vue】vue2与WebApi跨域CORS问题
本文链接:https://blog.csdn.net/youcheng_ge/article/details/133808959

【Vue】nvm安装教程(解决npm下依赖包版本冲突)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/132896207

【Vue】vue开发环境搭建教程(详细)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/132689006


文章目录

  • 系列文章
  • 前言
  • 一、技术介绍
  • 二、项目源码
    • 2.1 原parseTime函数(不推荐)
    • 2.2 formatDate函数
    • 2.3 filters过滤器添加引入
    • 2.4 main.js过滤器全局注册
    • 2.5 日期格式化使用
  • 三、效果展示
  • 四、资源链接


前言

本专栏为【Vue】,主要介绍Vue知识点。对于刚刚进入计算机世界的大学生来说,这里普及一个知识:HTML已经不仅仅只能开发 Web,也可以开发 AndroidiOS ,所以本文也会介绍 移动端开发。
我个人将安卓开发,分为两大方向:

①原生开发
使用安卓开发工具包(Android SDK)和Java编程语言来开发App的方式。原生开发允许开发者充分利用安卓平台的功能和特性,以及庞大的安卓开发社区资源。但是缺点就是对入门的门槛高,测试繁琐需要适配不同屏幕,对开发人员技术要求高。

②混合开发(加壳方式)
使用Web技术(网页三剑客HTML、CSS和JavaScript)开发App的方式。混合开发具有较高的开发效率和跨平台的优势,由于使用Web技术 界面渲染、不同屏幕适配(使用栅格技术)效果好。但是缺点就是对底层硬件调用库尚不完善,不过在不断完善中,常用的相机、相册、GPS、存储调用是没有问题的。

Vue是前端开发中的一个分支,学习Vue之前不可以速成,得先学会网页三剑客(HTML、CSS和JavaScript),因为Vue中依旧会使用到这些技术,Vue它不够是一种新的编程思想 组件化开发MVVM(数据双向绑定)

在这里插入图片描述

一、技术介绍

本文介绍Vue或者说前端吧,日期格式化。原日期为调制时间不方便阅读,我们希望转换成 yyyy-MM-dd hh:mm:ss 这种形式。
在这里插入图片描述
如上图所示,2023-12-11T18:51:32 这种日期很奇怪,为了兼容Excel文档日期格式啊,我们需要进行转换成 2023-12-11 18:51:32

经过我的测试,官网提供的parseTime()函数不能够满足要求,本文将自己写一个函数,并且全局可以调用。

二、项目源码

2.1 原parseTime函数(不推荐)

位置:src\utils\index.js
代码:略,模板里面自带
在这里插入图片描述
测试代码:

<el-table-column prop="领用时间" :show-overflow-tooltip="true" align="left" label="领用时间"><template slot-scope="scope"><span>{{ scope.row.领用时间 | parseTime('{y}-{m}-{d} {h}:{i}') }}</span></template>
</el-table-column>

在这里插入图片描述
转换失败,具体原因我没有查,我分析可能和我的数据源有关,我这数据源后台过来 DataTable,不是传统的list。 很不专业,我上司非要用DataTable好,我没办法一切兼容他。

其次,我个人觉得,官方提供的 parseTime() 也不是我想要的,故而本文进行自定义开发。

2.2 formatDate函数

在 utils 下,创建gyc.js。

位置:src\utils\gyc.js
代码:

// 表格格式化日期
export function formatDate(date, fmt) {date = new Date(date);if (typeof(fmt) === "undefined") {fmt = "yyyy-MM-dd hh:mm:ss";}if (/(y+)/.test(fmt)) {fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))}let o = {'M+': date.getMonth() + 1,'d+': date.getDate(),'h+': date.getHours(),'m+': date.getMinutes(),'s+': date.getSeconds()}for (let k in o) {if (new RegExp(`(${k})`).test(fmt)) {let str = o[k] + ''fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? str : ('00' + str).substr(str.length));}}return fmt
}

2.3 filters过滤器添加引入

就是一行代码,把2.2节创建的文件,引入进来。这里我这么做,主要还是为了代码看起来简洁,你也可以直接在 main.js 中全局引用。

位置:src\filters\index.js
代码:export { formatDate } from ‘@/utils/gyc’

在这里插入图片描述

2.4 main.js过滤器全局注册

这里就是全局注册了,我们分视图都可以反问到它,不要每次都引入。

位置:src\main.js
代码:

import * as filters from './filters' // 全局过滤器// 注册全局过滤器(日期时间)
Object.keys(filters).forEach(key => {Vue.filter(key, filters[key])
})

在这里插入图片描述

2.5 日期格式化使用

位置:自己页面的位置
代码:
formatDate()为自己定义的函数,就是 2.2节内容。
parseTime()为官方提供的函数,就是 src\utils\index.js。

<el-table-column prop="领用时间" :show-overflow-tooltip="true" align="left" label="领用时间"><template slot-scope="scope"><!-- <span>{{ scope.row.领用时间 | parseTime('{y}-{m}-{d} {h}:{i}') }}</span> --><span>{{ scope.row.领用时间 | formatDate('yyyy-MM-dd hh:mm:ss') }}</span></template>
</el-table-column>

三、效果展示

红色方框所示,已经显示正常了,其中日期格式自己也可以定义的,yyyy-MM-dd hh:mm:ss 日期学编程的应该都懂的。
在这里插入图片描述

四、资源链接

gyc.js

/*** @desc 自定义通用方法* @author gyc* @date 2023-11-23* @note */const baseURL = process.env.VUE_APP_BASE_API// 表格格式化日期
export function formatDate(date, fmt) {date = new Date(date);if (typeof(fmt) === "undefined") {fmt = "yyyy-MM-dd hh:mm:ss";}if (/(y+)/.test(fmt)) {fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))}let o = {'M+': date.getMonth() + 1,'d+': date.getDate(),'h+': date.getHours(),'m+': date.getMinutes(),'s+': date.getSeconds()}for (let k in o) {if (new RegExp(`(${k})`).test(fmt)) {let str = o[k] + ''fmt = fmt.replace(RegExp.$1, RegExp.$1.length === 1 ? str : ('00' + str).substr(str.length));}}return fmt
}// 表单重置
export function resetForm(refName) {if (this.$refs[refName]) {this.$refs[refName].resetFields()}
}/*** 添加日期范围* @param { beginTime: '', endTime: '', page: 1} params* @param {*} dateRange 日期范围数组* @param {*} propName C#属性名首字母大写* @returns*/
// 添加日期范围
export function addDateRange(params, dateRange, propName) {let search = paramssearch = typeof search === 'object' && search !== null && !Array.isArray(search) ? search : {}dateRange = Array.isArray(dateRange) ? dateRange : []if (typeof propName === 'undefined') {search['beginTime'] = dateRange[0]search['endTime'] = dateRange[1]} else {search['begin' + propName] = dateRange[0]search['end' + propName] = dateRange[1]}return search
}export function addDateRange2(dateRange, index) {var time = undefinedif (null != dateRange && '' != dateRange) {if (dateRange.length <= 2) {time = dateRange[index]}}return time
}// 回显数据字典
export function selectDictLabel(datas, value) {if (value === undefined) {return ''}var actions = []Object.keys(datas).some((key) => {if (datas[key].dictValue == '' + value) {actions.push(datas[key].dictLabel)return true}})if (actions.length === 0) {actions.push(value)}return actions.join('')
}// 回显数据字典(字符串数组)
export function selectDictLabels(datas, value, separator) {if (value === undefined) {return ''}var actions = []var currentSeparator = undefined === separator ? ',' : separatorvar temp = value.split(currentSeparator)Object.keys(value.split(currentSeparator)).some((val) => {var match = falseObject.keys(datas).some((key) => {if (datas[key].value == '' + temp[val]) {actions.push(datas[key].label + currentSeparator)match = true}})if (!match) {actions.push(temp[val] + currentSeparator)}})return actions.join('').substring(0, actions.join('').length - 1)
}// table是否显示当前列
export function showColumn(columns, value) {columns.filter((item, index) => {// console.log(item);return item.key == value})
}// 通用下载方法
export function download(url, fileName) {// window.location.href = baseURL + "/common/download?fileName=" + encodeURI(fileName) + "&delete=" + true;// window.open(baseURL + "/common/download?fileName=" + encodeURI(fileName) + "&delete=" + true)window.open(baseURL + url)
}// 字符串格式化(%s )
export function sprintf(str) {var args = arguments,flag = true,i = 1str = str.replace(/%s/g, function () {var arg = args[i++]if (typeof arg === 'undefined') {flag = falsereturn ''}return arg})return flag ? str : ''
}// 转换字符串,undefined,null等转化为""
export function praseStrEmpty(str) {if (!str || str == 'undefined' || str == 'null') {return ''}return str
}
export function praseStrZero(str) {if (!str || str == 'undefined' || str == 'null') {console.log('zero')return 0}return str
}
/*** 构造树型结构数据* @param {*} data 数据源* @param {*} id id字段 默认 'id'* @param {*} parentId 父节点字段 默认 'parentId'* @param {*} children 孩子节点字段 默认 'children'* @param {*} rootId 根Id 默认 0*/
export function handleTree(data, id, parentId, children) {let config = {id: id || 'id',parentId: parentId || 'parentId',childrenList: children || 'children',}var childrenListMap = {}var nodeIds = {}var tree = []for (let d of data) {let parentId = d[config.parentId]if (childrenListMap[parentId] == null) {childrenListMap[parentId] = []}nodeIds[d[config.id]] = dchildrenListMap[parentId].push(d)}for (let d of data) {let parentId = d[config.parentId]if (nodeIds[parentId] == null) {tree.push(d)}}for (let t of tree) {adaptToChildrenList(t)}function adaptToChildrenList(o) {if (childrenListMap[o[config.id]] !== null) {o[config.childrenList] = childrenListMap[o[config.id]]}if (o[config.childrenList]) {for (let c of o[config.childrenList]) {adaptToChildrenList(c)}}}return tree
}/*** 构造自定义字典数据* @param {*} data 数据源* @param {*} lableId id字段 默认 'lableId'* @param {*} labelName 名称 默认 'labelName'*/
export function handleDict(data, lableId, labelName) {lableId = lableId || 'id'labelName = labelName || 'name'//循环所有项var dictList = []if (!Array.isArray(data)) {return []}data.forEach((element) => {dictList.push({dictLabel: element[labelName],dictValue: element[lableId].toString(),})})return dictList
}// 验证是否为blob格式
export async function blobValidate(data) {try {const text = await data.text()JSON.parse(text)return false} catch (error) {return true}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/225945.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于“Python”的核心知识点整理大全23

目录 ​编辑 第&#xff11;0 章 文件和异常 10.1 从文件中读取数据 10.1.1 读取整个文件 pi_digits.txt file_reader.py 10.1.2 文件路径 10.1.3 逐行读取 file_reader.py 10.1.4 创建一个包含文件各行内容的列表 10.1.5 使用文件的内容 pi_string.py 往期快速传…

Microsoft visual studio 2013卸载方法

1、问 题 Microsoft visual studio 2013 无法通过【程序与功能】卸载 2、解决方法 使用微软的Microsoft visual studio 2013 专用卸载工具 工具下载链接&#xff1a;https://github.com/Microsoft/VisualStudioUninstaller/releases 或 链接&#xff1a;https://pan.baidu.c…

【自动化测试】web3py 连接 goerli

web3py 连接 goerli 直接使用库里方法 if __name__ __main__:from web3.auto.infura.goerli import w3w3.eth.get_balance(get_address_by_private_key(os.getenv("AAA_KEY")))error info: websockets.exceptions.InvalidStatusCode: server rejected WebSocket …

02-MQ入门之RabbitMQ简单概念说明

二&#xff1a;RabbitMQ 介绍 1.RabbitMQ的概念 RabbitMQ 是一个消息中间件&#xff1a;它接受并转发消息。你可以把它当做一个快递站点&#xff0c;当你要发送一个包裹时&#xff0c;你把你的包裹放到快递站&#xff0c;快递员最终会把你的快递送到收件人那里&#xff0c;按…

LeetCode 1143最长公共子序列 1035不相交的线 53最大子序和 | 代码随想录25期训练营day53

动态规划算法11 LeetCode 1143 最长公共子序列 2023.12.16 题目链接代码随想录讲解[链接] int longestCommonSubsequence(string text1, string text2) {//1确定dp二维数组&#xff0c;dp[i][j]表示以text1[i-1]、text2[j-1]结尾相同的公共子序列的最大长度vector<vecto…

普通二叉树和右倾斜二叉树--LeetCode 111题《Minimum Depth of Binary Tree》

本文将以解释计算二叉树的最小深度的思路为例&#xff0c;致力于用简洁易懂的语言详细描述普通二叉树和右倾斜二叉树在计算最小深度时的区别。通过跟随作者了解右倾斜二叉树的概念以及其最小深度计算过程&#xff0c;读者也将对左倾斜二叉树有更深入的了解。这将为解决LeetCode…

BIM 技术:CIM (City Information Modeling) 1-7 级

本心、输入输出、结果 文章目录 BIM 技术&#xff1a;CIM &#xff08;City Information Modeling&#xff09; 1-7 级前言城市信息模型&#xff08;CIM&#xff09;概述城市信息模型分级介绍CIM 1CIM 2CIM 3CIM 4CIM 5CIM 6CIM 7 花有重开日&#xff0c;人无再少年实践是检验真…

【Linux】dump命令使用

dump命令 dump命令用于备份文件系统。使用dump命令可以检查ext2/3/4文件系统上的文件&#xff0c;并确定哪些文件需要备份。这些文件复制到指定的磁盘、磁带或其他存储介质保管。 语法 dump [选项] [目录|文件系统] bash: dump: 未找到命令... 安装dump yum -y install …

TableView复用机制的坑

TableView复用机制的坑 复用机制 UITableView 首先加载能够覆盖一屏幕的 UITableViewCell&#xff08;具体个数要根据每个 cell 的高度而定&#xff09;。 然后当我们往上滑动时&#xff08;往下滑动同理&#xff09;&#xff0c;需要一个新的 cell 放置在列表的下方。此时&…

SpringBoot Starter机制(自定义Start案例,实际开发场景中的短信模拟,AOP实现日志打印)

前言&#xff1a; 在我们上一篇博客中&#xff0c;实现Freemarke的增删改查&#xff0c;今天分享的是关于SpringBoot Starter机制-- 1.SpringBoot Starter 1.1.什么是SpringBoot Starter SpringBoot中的starter是一种非常重要的机制(自动化配置)&#xff0c;能够抛弃以前繁杂…

一款专业的磁盘坏道清除、彻底清除填充数据根据-硬盘数据彻底清除的方法分享

工具提供了硬盘坏道修复功能&#xff0c;你可以将损坏的磁盘放到软件分析&#xff0c;让软件找到错误的地方&#xff0c;让软件找到损坏的区域&#xff0c;通过内置的修复功能就可以将不能正常使用的部分恢复&#xff0c;从而让您的电脑磁盘可以保存很多数据&#xff0c;避免造…

Windows安装Tesseract OCR与Python中使用pytesseract进行文字识别

文章目录 前言一、下载并安装Tesseract OCR二、配置环境变量三、Python中安装使用pytesseract总结 前言 Tesseract OCR是一个开源OCR&#xff08;Optical Character Recognition&#xff09;引擎&#xff0c;用于从图像中提取文本。Pytesseract是Tesseract OCR的Python封装&am…

【python】Debian安装miniconda、spyder、tushare

1. miniconda 安装 — 动手学深度学习 2.0.0 documentation中有安装Miniconda的一些说明。 Miniconda — miniconda documentation是Miniconda网站&#xff0c;里面也有安装说明。 Debian安装按照linux安装即可&#xff1a; mkdir -p ~/miniconda3 wget https://repo.anaco…

macbookpro 2024怎么恢复出厂设置

可能你的MacBook曾经是高性能的代表&#xff0c;但是现在它正慢慢地逝去了自己的光芒&#xff1f;随着逐年的使用以及文件的添加和程序的安装&#xff0c;你的MacBook可能会开始变得迟缓卡顿&#xff0c;或者失却了以往的光彩。如果你发现你的Mac开始出现这些严重问题&#xff…

英语综合教程1第三版的一些题

unit1 unit2 unit3 unit4 unit5 unit6

3.1 内容管理模块 - 工程搭建、课程查询、配置Swagger、数据字典

文章目录 内容管理模块一、基础工程搭建1.1 需求分析1.2 业务流程1.3 数据模型1.4 创建模块工程1.4.1 介绍1.4.2 xuecheng-plus-content 聚合工程1.4.3 模块演示 二、课程查询准备2.1 需求分析2.1.1 业务流程2.1.2 数据模型 2.2 生成PO类2.2.1 新增Maven配置2.2.2 课程基本信息…

CSS的盒子模型(重点)

网页布局的三大核心&#xff1a;盒子模型、浮动、定位 网页布局的过程&#xff1a; 1. 先准备好相关的网页元素&#xff0c;网页元素基本都是盒子 Box 。 2. 利用 CSS 设置好盒子样式&#xff0c;然后摆放到相应位置。 3. 往盒子里面装内容.网页布局的核心本质&#xff1a; 就…

python+appium自动化常见操作

1、点击、输入操作 #点击 driver.find_element(id,com.lemon.lemonban:id/navigation_my).click() #输入 driver.find_element(id,com.lemon.lemonban:id/et_password).send_keys(abc)2、隐形等待 driver.implicitly_wait(10)3、显性等待 #显性等待 locator (xpath,xpath) wai…

技术分享 | Appium 用例录制

下载及安装 下载地址&#xff1a; github.com/appium/appi… 下载对应系统的 Appium 版本&#xff0c;安装完成之后&#xff0c;点击 “Start Server”&#xff0c;就启动了 Appium Server。 在启动成功页面点击右上角的放大镜&#xff0c;进入到创建 Session 页面。配置好 …

Python基础学习—Pandas数据分析实战剖析【文末送书-09】

文章目录 一.Pandas数据分析1.1 Pandas的主要应用包括&#xff1a;1.2 Pandas核心数据结构1.3 安装和导入Pandas 二.Pandas数据分析实战&#xff1a;用Python进行数据分析1. 数据集介绍2. 数据加载与初步观察3. 数据清洗4. 数据分析4.1 销售趋势分析4.2 热门商品分析 三.Pandas…