js计算开始时间与结束时间相差时间天数

343 阅读1分钟

微信截图_20220221142423.png

<template>
	<view class="content">
		<view>开始时间</view>
		<input 
		type="text" 
		:value="startTime" 
		:disabled="true"
		@click="getStart"
		/>
		<u-picker
		mode="time" 
		v-model="isStartShow" 
		:params="yeardayparams" @confirm="startConfirm"></u-picker>
		
		<view>结束时间</view>
		<input 
		type="text" 
		:value="endTime" 
		:disabled="true"
		@click="getend"
		/>
		<u-picker
		mode="time" 
		v-model="isEndShow" 
		:params="yeardayparams" @confirm="endConfirm"></u-picker>
		<view>
			相关天数:{{days}}
		</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				isStartShow:false,
				yeardayparams:{
					year: true,
					month: true,
					day: true,
					hour: true
				},
				startTime:'',
				endTime:'',
				isEndShow:false,
				days:''
			}
		},
		onLoad() {

		},
		methods: {
			getStart(){
				console.log('sd')
				this.isStartShow = true;
			},
			startConfirm(confirm){
				
				if(confirm.hasOwnProperty('hour')){
					this.startTime = `${confirm.year}-${confirm.month}-${confirm.day} ${confirm.hour}`
					
					let d_datetime1 = new Date(this.startTime+':00:00')
					let d_datetime2 = new Date(this.endTime+':00:00')
					console.log('d_datetime2',d_datetime2)
					if(d_datetime2 < d_datetime1){
						uni.showToast({
							title:"结束时间应大于开始时间",
							icon:"none",
							duration:3000
						})
					}
					
					let newtime1 = new Date(d_datetime1).getTime();
					let newtime2 = new Date(d_datetime2).getTime();
					let newDay = this.countWorkDay(newtime1,newtime2)
					console.log(newDay,'34')
					
					
				}
				
			},
			getend(){
				this.isEndShow=true
			},
			endConfirm(confirm){
				if(confirm.hasOwnProperty('hour')){
					
					this.endTime = `${confirm.year}-${confirm.month}-${confirm.day} ${confirm.hour}`
					let d_datetime1 = new Date(this.startTime+':00:00')
					let d_datetime2 = new Date(this.endTime+':00:00')
					if(d_datetime2 < d_datetime1){
						uni.showToast({
							title:"结束时间应大于开始时间",
							icon:"none",
							duration:3000
						})
					}
					
					let newtime1 = new Date(d_datetime1).getTime();
					let newtime2 = new Date(d_datetime2).getTime();
					let newDay = this.countWorkDay(newtime1,newtime2)
				
					console.log(newDay,'35')
					this.days = newDay
					
				}
			},
			countWorkDay(sDay,eDay){
			   
			    var sDay = new Date(sDay);
			   
			   
			    var eDay = new Date(eDay);
			   
			   
			    // 总相差天数
			    var diffDay = (eDay - sDay) / (1000 * 60 * 60 * 24) + 1;
			    
			
			    var newSday = sDay.getTime()
			 
			    var newEday = eDay.getTime()
			 
			    var diff = newEday - newSday
			   
			    var days = Math.floor(diff / (24*3600*1000))
			   
			    //计算相差小时
			    var leave1 = diff%(24*3600*1000)
			    var hours = Math.floor(leave1/(3600*1000))
			  
			    if(hours <= 4 && days == 0){
			        return 0.5
			    }else if(hours > 4 && days == 0){
			        return days + 1;
			    }
			
			    if(parseInt(diffDay) == 0)
			        return parseInt(diffDay);
			    // 周末天数
			    var weekEnds = 0; 
			    for(var i = 0; i < diffDay; i++){ 
			       
			        if(sDay.getDay() == 0 || sDay.getDay() == 6) 
			            weekEnds ++; 
			        sDay = sDay.valueOf(); 
			        sDay += 1000 * 60 * 60 * 24; 
			        sDay = new Date(sDay); 
			    } 
			    if(weekEnds == 1 || weekEnds == 3 || weekEnds == 5 || weekEnds == 7){
			        return parseInt(diffDay - weekEnds) + 1;
			    }else{
			        return parseInt(diffDay - weekEnds);
			    }
			    
			},
		}
	}
</script>

<style>
	.content{
		padding:10px;
	}
	input{
		border-radius:10px;
		padding:10px;
		border:1px solid #ccc;
	}
</style>