一,iView时间组件:DatePicker封装使用
官网参考:DatePicker属性
a,Date-picker封装为时间查询范围的组件:
<template>
<span>
<slot />
<FormItem>
<DatePicker
v-model="condition.S_createTime_GTOE"
confirm
clearable
placement="bottom"
class="select-width"
:type="type"
:format="format"
:options="pickerStart"
transfer
@on-change="onStartDateChange"
></DatePicker>
</FormItem>
<span class="search-label">至</span>
<FormItem>
<DatePicker
v-model="condition.S_createTime_LTOE"
confirm
clearable
placement="bottom"
:type="type"
:format="format"
class="select-width"
:options="pickerEnd"
transfer
@on-change="onEndDateChange"
></DatePicker>
</FormItem>
</span>
</template>
引入时间处理方法
import { convertUTCTimeToLocalTime } from "@/libs/tools";
/**
* @param {Number} UTCDateString 传入的UTC时间格式
*/
export const convertUTCTimeToLocalTime = (UTCDateString, second) => {
if(!UTCDateString){
return '-';
}
function formatFunc(str) { //格式化显示
return str > 9 ? str : '0' + str
}
let date2 = new Date(UTCDateString);
let year = date2.getFullYear();
let mon = formatFunc(date2.getMonth() + 1);
let day = formatFunc(date2.getDate());
let hour = date2.getHours();
hour = formatFunc(hour);
let min = formatFunc(date2.getMinutes());
let ss = formatFunc(date2.getSeconds())
let dateStr = year+'-'+mon+'-'+day+' '+hour+':'+min + (second ? `:${ss}` : '');
return dateStr;
}
组件方法
<script>
import { convertUTCTimeToLocalTime } from "@/libs/tools";
export default {
props: {
format: {
type: String,
default: "yyyy-MM-dd HH:mm:ss"
},
type: {
type: String,
default: "datetime"
},
defaultTime: {
type: Boolean,
default: true
},
searchField: {
type: String,
default: "createTime"
}
},
data(){
return {
condition: {
S_createTime_GTOE: "",
S_createTime_LTOE: ""
},
}
},
methods: {
getDefaultTime(end) {
//返回当前时间和前一小时
function format(str) {
return str < 10 ? "0" + str : str;
}
let date = new Date();
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate();
let time = end ? " 23:59:59" : " 00:00:00"
return (
year +
"-" +
format(month) +
"-" +
format(day) +
time
);
},
getDateSearch(){
const defaultTime = this.defaultTime
let valid = true;
let { S_createTime_GTOE, S_createTime_LTOE } = this.condition
if (S_createTime_GTOE && typeof S_createTime_GTOE === "object") {
S_createTime_GTOE = convertUTCTimeToLocalTime(S_createTime_GTOE, true);
}
if (S_createTime_LTOE && typeof S_createTime_LTOE === "object") {
S_createTime_LTOE = convertUTCTimeToLocalTime(S_createTime_LTOE, true);
}
if(defaultTime){
if (!S_createTime_GTOE) {
this.$Message.warning("查询起始时间不能为空");
valid = false;
} else if (!S_createTime_LTOE) {
this.$Message.warning("查询结束时间不能为空");
valid = false;
} else if(S_createTime_LTOE < S_createTime_GTOE){
this.$Message.warning("结束时间不能早于起始时间");
valid = false;
} /* else if(S_createTime_GTOE.split(' ')[0] != S_createTime_LTOE.split(' ')[0]){
this.$Message.warning("起始和结束需为同一天");
valid = false;
} */
}else{
if(S_createTime_LTOE && (S_createTime_LTOE < S_createTime_GTOE)){
this.$Message.warning("结束时间不能早于起始时间");
valid = false;
}
}
return {
valid,
[`S_${this.searchField}_GTOE`]: this.formatDateTime(S_createTime_GTOE),
[`S_${this.searchField}_LTOE`]: this.formatDateTime(S_createTime_LTOE)
}
},
formatDateTime(date){
if(date){
switch(this.format){
case "yyyy-MM-dd":
date = date.split(" ")[0]
break;
case "yyyy-MM-dd HH:mm:ss":
default:
break;
}
}
return date
},
onStartDateChange(date) {
this.condition.S_createTime_GTOE = date;
},
onEndDateChange(date) {
if(date && date.split(" ")[1] === "00:00:00"){
this.condition.S_createTime_LTOE = date.split(" ")[0] + " 23:59:59";
return
}
this.condition.S_createTime_LTOE = date;
},
resetDateSearch(){
if(this.defaultTime){
this.condition.S_createTime_GTOE = this.getDefaultTime(),
this.condition.S_createTime_LTOE = this.getDefaultTime('end')
}else{
this.condition.S_createTime_GTOE = ""
this.condition.S_createTime_LTOE = ""
}
}
},
created(){
this.resetDateSearch()
}
}
</script>
b,页面中使用
引入组件
import Common from "_c/common.vue";
import DateSearchEnv from "_c/date-search-env";
export default {
mixins: [Common],
components: { DateSearchEnv},
data() {}
}
页面使用
<date-search-env ref="dateSearch">
<span class="search-label">发送时间</span>
</date-search-env>
页面获取参数
let { valid, S_createTime_LTOE, S_createTime_GTOE } =this.$refs.dateSearch.getDateSearch();
c,效果
二,获取初始时间
获取初始时间
获取本月及上月
获取今天及昨天
a,/libs/tools.js中加
/**
* @returns {date} 获取当月及上月
*/
export const getNowMonth=()=>{
var date = new Date();
var nowY = date.getFullYear() + "-";
var nowM =
date.getMonth() + 1 < 10
? "0" + (date.getMonth() + 1)
: date.getMonth() + 1;
var getNowMonth=nowY+nowM;
// var getBeforeMonth=nowY+date.getMonth();
let getBeforeMonth="";
if(nowM==1){
getBeforeMonth= date.getFullYear()-1+ "-"+12;
}else{
getBeforeMonth=nowY+date.getMonth();
}
return [getBeforeMonth,getNowMonth]
}
/**
* @returns {date} 获取今天及昨天
*/
export const getNowDate=()=>{
var date = new Date(); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
var nowY = date.getFullYear() + "-";
var nowM =
date.getMonth() + 1 < 10
? "0" + (date.getMonth() + 1) + "-"
: date.getMonth() + 1 + "-";
var nowDate = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
var time = new Date().getTime() - 24 * 60 * 60 * 1000;
var yesterday = new Date(time);
var getToday = nowY + nowM + nowDate;
var getyesterday = yesterday;
return [getyesterday,getToday]
}
b,commponents/common.vue引入
import {
convertUTCTimeToLocalTime,
convertUTCTimeToDate,
convertUTCTimeToMonth,
convertUTCTimeToSecond,
distanceMonth,
getTimestampToDate,
getTimestampToMonth,
getNowMonth,
getNowDate,
numberValidator
} from "@/libs/tools";
import axios from "@/libs/api.request.js";
//初始月份(当月及上月)
initMonth(){
return getNowMonth();
},
//初始日期(今天及昨天)
initDate(){
return getNowDate();
},
c,页面中引入使用
import Common from "_c/common";
import { convertUTCTimeToLocalTime, numberFixed } from "@/libs/tools";
export default {
mixins: [Common],
data() {
return {
}}
}
d,效果
初始日期
created() {
this.condition.S_date_GTOE = this.initDate()[0];
this.condition.S_date_LTOE = this.initDate()[1];
}
初始月份
created() {
this.condition.S_month_GTOE=this.initMonth()[0]
this.condition.S_month_LTOE=this.initMonth()[1]
}
三,时间范围校验
a,/libs/tools.js中加
/**
* @returns {Number} 月份间隔数
*/
export const distanceMonth=(startTime,endTime)=>{
startTime = new Date(startTime)
endTime = new Date(endTime)
var dateToMonth = 0
var startDate=startTime.getDate() + startTime.getHours()/24 + startTime.getMinutes()/24/60;
var endDate=endTime.getDate() +endTime.getHours()/24 + endTime.getMinutes()/24/60;
if(endDate >= startDate){
dateToMonth = 0
}else{
dateToMonth = -1
}
let yearToMonth = (endTime.getYear() - startTime.getYear()) * 12
let monthToMonth = endTime.getMonth() - startTime.getMonth()
return yearToMonth + monthToMonth + dateToMonth
}
b,commponents/common.vue引入后封装
//获取日期间隔月份
getMonthsapart(startTime,endTime){
return distanceMonth(startTime,endTime);
},
c,页面中使用:
日期查询限制一个月内
if (
this.getMonthsapart(this.condition.S_date_GTOE,this.condition.S_date_LTOE)>0
) {
return this.$Message.warning("起始和结束区间需为一个月");
}
日期查询范围限制一个自然年内
if(
this.getMonthsapart(this.condition.S_month_GTOE,this.condition.S_month_LTOE)>12
){
return this.$Message.warning("起始和结束区间需为一年");
}
d,其他校验
同年同月校验
if(
S_date_GTOE.split("-")[1] != S_date_LTOE.split("-")[1] ||
S_date_GTOE.split("-")[0] != S_date_LTOE.split("-")[0]||
){
return this.$Message.warning("起始和结束需为同年同月");
}
同年校验
if(
this.condition.S_countMonth_GTOE.split('-')[0] != this.condition.S_countMonth_LTOE.split('-')[0]
){
return this.$Message.warning("起始和结束需为同一年");
}
非空校验
if (!this.condition.S_date_GTOE ) {
this.$Message.error("开始时间不能为空");
return;
}
顺序校验
if (S_date_GTOE > S_date_LTOE) {
return this.$Message.warning("结束时间不能早于起始时间");
}
四,时间格式化处理
(1)时区转换:
a,commponents/common.vue引入后封装
//格式化日期
timestampToDate(timestamp){
return getTimestampToDate(timestamp);
},
//格式化月份
timestampToMonth(timestamp){
return getTimestampToMonth(timestamp);
},
b,/libs/tools.js中加方法:
/**
* @returns {date} 格式化日期
*/
export const getTimestampToDate=(timestamp)=> {
var date = new Date(timestamp); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
var Y = date.getFullYear() + "-";
var M =
date.getMonth() + 1 < 10
? "0" + (date.getMonth() + 1)
: date.getMonth() + 1;
var D = date.getDate() < 10 ? "0" + date.getDate() : date.getDate();
return Y + M + "-" + D;
}
/**
* @returns {date} 格式化月份
*/
export const getTimestampToMonth=(timestamp)=> {
var date = new Date(timestamp); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
var Y = date.getFullYear() + "-";
var M =
date.getMonth() + 1 < 10
? "0" + (date.getMonth() + 1)
: date.getMonth() + 1;
return Y + M;
}
c,页面中使用:
日期
S_date_GTOE = this.timestampToDate(S_date_GTOE);
S_date_LTOE = this.timestampToDate(S_date_LTOE);
月份
this.condition.S_month_GTOE = this.timestampToMonth(
this.condition.S_month_GTOE
);
this.condition.S_month_LTOE = this.timestampToMonth(
this.condition.S_month_LTOE
);
(2)时间截取显示
a,commponents/common.vue引入后封装
//将UTC时间转换为当地时间
getTranslateDate(date) {
return convertUTCTimeToLocalTime(date);
},
getTranslateByDate(date) {
return convertUTCTimeToDate(date);
},
getTranslateByMonth(date) {
return convertUTCTimeToMonth(date);
},
getTranslateBySecond(date) {
return convertUTCTimeToSecond(date);
},
b,/libs/tools.js中加方法:
//时间到日期(年/月/日)
export const convertUTCTimeToDate = (UTCDateString) => {
if(!UTCDateString){
return '-';
}
function formatFunc(str) { //格式化显示
return str > 9 ? str : '0' + str
}
let date2 = new Date(UTCDateString); //这步是关键
let year = date2.getFullYear();
let mon = formatFunc(date2.getMonth() + 1);
let day = formatFunc(date2.getDate());
let hour = date2.getHours();
hour = formatFunc(hour);
let min = formatFunc(date2.getMinutes());
let second = formatFunc(date2.getSeconds());//获取秒
//let dateStr = year+'-'+mon+'-'+day+' '+noon +' '+hour+':'+min;
let dateStr = year+'-'+mon+'-'+day;
return dateStr;
}
//时间到月(年/月)
export const convertUTCTimeToMonth = (UTCDateString) => {
if(!UTCDateString){
return '-';
}
function formatFunc(str) { //格式化显示
return str > 9 ? str : '0' + str
}
let date2 = new Date(UTCDateString); //这步是关键
let year = date2.getFullYear();
let mon = formatFunc(date2.getMonth() + 1);
let day = formatFunc(date2.getDate());
let hour = date2.getHours();
hour = formatFunc(hour);
let min = formatFunc(date2.getMinutes());
let second = formatFunc(date2.getSeconds());//获取秒
//let dateStr = year+'-'+mon+'-'+day+' '+noon +' '+hour+':'+min;
let dateStr = year+'-'+mon;
return dateStr;
}
/**
* @param {Number} UTCDateString 传入的UTC时间格式
*/
export const convertUTCTimeToLocalTime = (UTCDateString, second) => {
if(!UTCDateString){
return '-';
}
function formatFunc(str) { //格式化显示
return str > 9 ? str : '0' + str
}
let date2 = new Date(UTCDateString); //这步是关键
let year = date2.getFullYear();
let mon = formatFunc(date2.getMonth() + 1);
let day = formatFunc(date2.getDate());
let hour = date2.getHours();
hour = formatFunc(hour);
let min = formatFunc(date2.getMinutes());
let ss = formatFunc(date2.getSeconds())
let dateStr = year+'-'+mon+'-'+day+' '+hour+':'+min + (second ? `:${ss}` : '');
return dateStr;
}
//时间到秒(年/月/日 时:分:秒)
export const convertUTCTimeToSecond = (UTCDateString) => {
if(!UTCDateString){
return '-';
}
function formatFunc(str) { //格式化显示
return str > 9 ? str : '0' + str
}
let date2 = new Date(UTCDateString); //这步是关键
let year = date2.getFullYear();
let mon = formatFunc(date2.getMonth() + 1);
let day = formatFunc(date2.getDate());
let hour = date2.getHours();
hour = formatFunc(hour);
let min = formatFunc(date2.getMinutes());
let second = formatFunc(date2.getSeconds());//获取秒
let dateStr = year+'-'+mon+'-'+day+' '+hour+':'+min+':'+second;
return dateStr;
}
c,页面中使用
columns:[
{
title: "创建时间",
align: "center",
slot: "createTime",
},
],
<Table :columns="columns" :data="tableList" size="small" :row-class-name="rowClassName" @on-selection-change="getSelectItems">
<template slot-scope="{row}" slot="weak">
{{ row.weak ? "强" : "弱"}}
</template>
<template
slot-scope="{ row}"
slot="createTime"
>{{getTranslateDate(row.createTime)}}</template>
</Table>
d,效果图: