頁面圖片 :
父組件:
<template>
<div class="pickerDemo">
<h6>第一個的時間:</h6>
<div class="boxDate">
<div class="leftDate">當前時間:</div>
<div class="rightDate">
<DateModel
@returnDate="returnDate1"
:date="date1"
:maxDate="maxDate1"
/>
</div>
</div>
<h6>第二個的時間:</h6>
<div class="boxDate">
<div class="leftDate">當前時間2:</div>
<div class="rightDate">
<DateModel
@returnDate="returnDate2"
:date="date2"
:minDate="minDate2"
/>
</div>
</div>
</div>
</template>
<script>
import DateModel from './DateModel'
export default {
name: 'date',
data () {
return {
date1:'',
maxDate1:'',//第一個組件設置最大日期
date2:'',
minDate2:"",//第二個 組件設置最小日期
}
},
components: {
DateModel
},
created () {
},
mounted () {
let newDate=new Date();
this.maxDate1=this.dateYMD()
this.date2=this.dateYMD(0,0,28)//默認第二個顯示大於第一個一天
this.minDate2=this.dateYMD()
},
methods: {
dateYMD(a,b,c){
let yy=parseInt(a) || 0,mm=parseInt(b) || 0,dd=parseInt(c) || 0,date=new Date(),y="",m="",d="";
y=date.getFullYear()+yy+'';
m=date.getMonth()+1+mm+'';
let monthDate=this.mGetDate(y,m);
if(dd<0){
if(date.getDate()<=-dd){
m=m-1+'';
let mDate=this.mGetDate(y,m);
d=date.getDate()+mDate+dd+''
}else{
d=date.getDate()+dd+'';
}
}else{
if(date.getDate()+dd>=monthDate){
m=parseInt(m)+1+'';
let mDate=this.mGetDate(y,m);
d=date.getDate()-mDate+parseInt(dd)+''
}else{
d=date.getDate()+dd+'';
}
}
m=m.length==1?('0'+m):m,
d=d.length==1?('0'+d):d;
return y+'-'+m+'-'+d;
},
mGetDate(){
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth()+1;
var d = new Date(year, month, 0);
return d.getDate();
},
returnDate1(v){
//第一個日期的回調函數 需要給第二個設置最小值
this.minDate2=v;
this.date1=v;
},
returnDate2(v){
//第二個日期選擇框的回調函數
this.maxDate1=v;
this.date2=v;
}
}
}
</script>
<style scoped>
.boxDate{
width: 100%;
height: 50px;
line-height: 50px;
border: 1px solid #FF776D;
box-sizing: border-box;
}
.leftDate{
width: 30%;
float: left;
}
.rightDate{
width: 70%;
float: left;
}
</style>
子組件:
<template>
<div class="pickerDemo">
<div class="showTime" @click="selectData">
{{this.selectedValue}}
</div>
<!-- @touchmove.prevent 阻止默認事件,此方法可以在選擇時間時阻止頁面也跟着滾動。 -->
<div class="pickerPop" @touchmove.prevent>
<!-- 年月日時分選擇 -->
<mt-datetime-picker
lockScroll="true"
ref="datePicker"
v-model="dateVal"
class="myPicker"
type="date"
year-format="{value}"
month-format="{value}"
date-format="{value}"
@confirm="dateConfirm()"
:startDate="minStartDate"
:endDate="maxEndDate"
>
</mt-datetime-picker>
</div>
</div>
</template>
<script>
export default {
name: 'date',
data () {
return {
dateVal: '', // 默認是當前日期
selectedValue: "",
minStartDate:new Date(),
maxEndDate:new Date()
}
},
components: {
},
props:["date","minDate","maxDate"],
watch:{
date(newval,oldval){
this.selectedValue=newval;
},
minDate(newval,oldval){
if(this.minDate){
this.minStartDate=new Date(this.minDate.trim().substr(0,10))
}else{
this.minStartDate=new Date(newDate.getFullYear()-20+'-01-01');
}
},
maxDate(newval,oldval){
if(this.maxDate){
this.maxEndDate=new Date(this.maxDate.trim().substr(0,10))
}else{
this.maxEndDate=new Date(newDate.getFullYear()+20+'-12-30');
}
},
},
created () {
},
mounted () {
this.start();
},
methods: {
start(){
let newDate=new Date();
if(this.minDate){
this.minStartDate=new Date(this.minDate.trim().substr(0,10))
}else{
this.minStartDate=new Date(newDate.getFullYear()-20+'-01-01');
}
if(this.maxDate){
this.maxEndDate=new Date(this.maxDate.trim().substr(0,10))
}else{
this.maxEndDate=new Date(newDate.getFullYear()+20+'-12-30');
}
if(this.date){
let newStart=this.date.substr(0,10);
this.selectedValue=newStart;
}else{
this.selectedValue=this.dateYMD()
}
},
dateYMD(a,b,c){
let yy=parseInt(a) || 0,mm=parseInt(b) || 0,dd=parseInt(c) || 0,date=new Date(),y="",m="",d="";
y=date.getFullYear()+yy+'';
m=date.getMonth()+1+mm+'';
let monthDate=this.mGetDate(y,m);
if(dd<0){
if(date.getDate()<=-dd){
m=m-1+'';
let mDate=this.mGetDate(y,m);
d=date.getDate()+mDate+dd+''
}else{
d=date.getDate()+dd+'';
}
}else{
if(date.getDate()+dd>=monthDate){
m=parseInt(m)+1+'';
let mDate=this.mGetDate(y,m);
d=date.getDate()-mDate+parseInt(dd)+''
}else{
d=date.getDate()+dd+'';
}
}
m=m.length==1?('0'+m):m,
d=d.length==1?('0'+d):d;
return y+'-'+m+'-'+d;
},
mGetDate(){
var date = new Date();
var year = date.getFullYear();
var month = date.getMonth()+1;
var d = new Date(year, month, 0);
return d.getDate();
},
selectData () { // 打開時間選擇器
this.start()
// 如果已經選過日期,則再次打開時間選擇器時,日期回顯(不需要回顯的話可以去掉 這個判斷)
if (this.selectedValue) {
this.dateVal = this.selectedValue
} else {
this.dateVal = new Date()
}
this.$refs['datePicker'].open()
},
dateConfirm (v) { // 時間選擇器確定按鈕,並把時間轉換成我們需要的時間格式
let y=this.dateVal.getFullYear()+"",
m=this.dateVal.getMonth()+1+"",
d=this.dateVal.getDate()+"";
m=m.length<2?'0'+m:m;
d=d.length<2?'0'+d:d;
this.selectedValue=y+'-'+m+'-'+d;
this.$emit('returnDate',this.selectedValue)
}
}
}
</script>
<style scoped>
</style>