JS计算时间差;.net计算时间差

计算时间差原理:
getTime()方法
方法定义: getTime() 方法可返回距 1970 年 1 月 1 日之间的毫秒数。

通常我们计算时间差都是通过获取两个时间数据,然后分别使用getTime()方法返回与固定的1970 年 1 月 1 日的时间差,通过对返回毫秒数的差,换算成时间单位,得出两个时间的时间差。

开始操作:
首先你会有一串初始的时间数据,然后通过 new Date(你的时间数据),将你的数据转成Date对象的形式。



var t1="2017/08/28 04:56:38"; //数据
var dateBegin = new Date(t1);//转化为Date对象的形式
//Mon Aug 28 2017 04:56:38 GMT+0800 (中国标准时间) 这里就是Date对象的数据形式


时间格式

这里的话就要注意一下后端给的时间数据格式的问题,比如下面两种:

第一种:"2017/08/28 04:56:38"//这种格式不用再进行处理
第二种:"2017-08-01 18:56:38"//这种格式就要进行处理

因为new Date()方法不能处理第二种数据,所以我们这里需要将第二种数据格式转化为第一种数据的格式。

var t1="2017-05-12 00:13:53";
var dateBegin = new Date(d1.replace(/-/g, "/"));//replace方法将-转为/

另一个时间数据:
既然是时间差的话,就肯定要有两个数据,不然怎么两相比较,一般两个数据中都会有一个当前时间的数据。


var dateEnd = new Date();//当前时间数据

完整计算时间差(天、小时、分钟、秒)的代码:

先获取之间的毫秒差,通过毫秒差换算出你所需要的时间单位,然后时间单位之间的换算根据的是他们的倍数关系。

function timeFn(d1) {//di作为一个变量传进来
	//如果时间格式是正确的,那下面这一步转化时间格式就可以不用了
	var dateBegin = new Date(d1.replace(/-/g, "/"));//将-转化为/,使用new Date
	var dateEnd = new Date();//获取当前时间
	var dateDiff = dateEnd.getTime() - dateBegin.getTime();//时间差的毫秒数
	var dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000));//计算出相差天数
	var leave1=dateDiff%(24*3600*1000) //计算天数后剩余的毫秒数
	var hours=Math.floor(leave1/(3600*1000))//计算出小时数
	//计算相差分钟数
	var leave2=leave1%(3600*1000) //计算小时数后剩余的毫秒数
	var minutes=Math.floor(leave2/(60*1000))//计算相差分钟数
	//计算相差秒数
	var leave3=leave2%(60*1000) //计算分钟数后剩余的毫秒数
	var seconds=Math.round(leave3/1000)
	console.log(" 相差 "+dayDiff+"天 "+hours+"小时 "+minutes+" 分钟"+seconds+" 秒")
	console.log(dateDiff+"时间差的毫秒数",dayDiff+"计算出相差天数",leave1+"计算天数后剩余的毫秒数"
	,hours+"计算出小时数",minutes+"计算相差分钟数",seconds+"计算相差秒数");
}
var t3="2017-08-18 04:56:38";
timeFn(t3);

不成熟的计算月、年:

//这里的dayDiff就是上文计算出的天数差
var monthDiff=Math.floor(dayDiff/30);//以30天为一个月不够精准严谨
//获取相差的月份
if (monthDiff<12){
	timeThis=monthDiff+"个月前发布";//获取相差的月份
	return
}
var yearDiff=Math.floor(monthDiff/12);//获取相差的年份
if(yearDiff>=1){
	timeThis=yearDiff+"年前发布";
	return
}

当天数相差较大的时候,单纯计算天数已经不能满足需求了,因为我们PM说的统一以30天为一个月的分界线,然后这里月份的计算情况感觉很复杂的样子没有继续研究下去。

获取当前月份的天数
function getDays() {
	//构造当前日期对象
	var date = new Date();
	var year = date.getFullYear();//获取年份
	var mouth = date.getMonth() + 1;//获取当前月份
	var days;//定义当月的天数;
	if (mouth == 2) {//当月份为二月时,根据闰年还是非闰年判断天数
		days = year % 4 == 0 ? 29 : 28;
	}
	else if (mouth == 1 || mouth == 3 || mouth == 5 || mouth == 7 || mouth == 8 || mouth == 10 || mouth == 12) {
	//月份为:1,3,5,7,8,10,12 时,为大月.则天数为31;
		days = 31;
	}
	else {
	//其他月份,天数为:30.
		days = 30;
	}
	return days;
}

.net计算时间差

两个时间相差多少 .net中的timespan应用2008/11/10 11:54TimeSpan 对象表示时间间隔或持续时间,按正负天数、小时数、分钟数、秒数以及秒的小数部分进行度量。用于度量持续时间的最大时间单位是天。更大的时间单位(如月和年)的天数不同,因此为保持一致性,时间间隔以天为单位来度量。

TimeSpan 对象的值是等于所表示时间间隔的刻度数。一个刻度等于 100 纳秒,TimeSpan 对象的值的范围在 MinValue 和 MaxValue 之间。

TimeSpan 值可以表示为 [-]d.hh.ss.ff,其中减号是可选的,它指示负时间间隔,d 分量表示天,hh 表示小时(24 小时制),mm 表示分钟,ss 表示秒,而 ff 为秒的小数部分。即,时间间隔包括整的正负天数、天数和剩余的不足一天的时长,或者只包含不足一天的时长。例如,初始化为 1.0e+13 刻度的 TimeSpan 对象的文本表示“11.13:46:40”,即 11 天,13 小时,46 分钟和 40 秒。

TimeSpan 类型实现了 System.IComparable 和 System.IComparable 接口。

protected void Page_Load(object sender, EventArgs e)
{
DateTime startTime=Convert.ToDateTime(“2007-04-11 15:53:08”);
DateTime endTime = Convert.ToDateTime(“2007-05-12 16:54:19”);
TimeSpan ts = endTime - startTime;
Response.Write(“相差的天数”+ts.Days+"
");
Response.Write(“相差的小时”+ts.Hours+"
");
Response.Write(“相差的分钟” + ts.Minutes + “
”);
Response.Write(“相差的秒数” + ts.Seconds + “
”);
Response.Write(“相差的总时间 用天数表示”+ts.TotalDays + “
”);
Response.Write(“相差的总时间 用小时表示” + ts.TotalHours + “
”);
Response.Write(“相差的总时间 用分钟表示” + ts.TotalMinutes + “
”);
Response.Write(“相差的总时间 用秒数表示” + ts.TotalSeconds + “
”);
}

运行结果:

相差的天数31
相差的小时1
相差的分钟1
相差的秒数11
相差的总时间 用天数表示31.0424884259259
相差的总时间 用小时表示745.019722222222
相差的总时间 用分钟表示44701.1833333333
相差的总时间 用秒数表示2682071 例:DateTime startTime = Convert.ToDateTime(“2007-04-11 15:53:08”);DateTime endTime = Convert.ToDateTime(“2007-05-12 16:54:19”); TimeSpan ts = endTime - startTime;
double totalSeconds = ts.TotalSeconds;//秒数
Console.WriteLine(totalSeconds);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值