前端和后台对时间数值的增减操作(JavaScript和C#两种方法)
最近在做一个视频回放项目,记录下一点总结。
应用背景:
假设有一个门禁系统记录着门禁的人员进出刷卡信息,门禁装有视频录像设备,现在要根据人员的刷卡时间调出其刷卡时间点前后一段时间的录像。关于视频回放部分具体实现过程较复杂本文不涉及,提一下其中涉及到的对时间数值的增减操作。
目标:
以时间格式的字符串“2015-01-01 00:00:00”为例,返回该时间点前30秒和后30秒的时间格式的字符串。
前端和后台其实都可以实现,只是方法不同而已。
后台(C#)实现方法:
string str = "2015-01-01 00:00:00";
DateTime dt = Convert.ToDateTime(str);//转换为DateTime对象,进而调用其相关方法 string sTime = dt.AddSeconds(-).ToString("yyyy-MM-dd HH:mm:ss");//前30秒(提醒:这里的小时用的是HH,返回结果是24小时制;如果使用hh,返回的是12小时制,有兴趣可以试一下)
string eTime = dt.AddSeconds().ToString("yyyy-MM-dd HH:mm:ss");//后30秒(提醒:C#中DateTime的AddSeconds()方法只返回处理结果而不改变DateTime对象原始值,所以这里的dt还是“2015-01-01 00:00:00”,这一点与下面的JavaScript方法是有区别的)
Console.WriteLine(sTime);//输出:"2014-12-31 23:59:30"
Console.WriteLine(eTime);//输出:"2015-01-01 00:00:30"
输出结果:
前端JavaScript实现方法:
//先引用一下CSDN大神meizz对Date对象添加的一个Format方法
Date.prototype.Format = function(fmt)
{ //author: meizz
var o = {
"M+" : this.getMonth()+, //月份
"d+" : this.getDate(), //日
"h+" : this.getHours(), //小时
"m+" : this.getMinutes(), //分
"s+" : this.getSeconds(), //秒
"q+" : Math.floor((this.getMonth()+)/), //季度
"S" : this.getMilliseconds() //毫秒
};
if(/(y+)/.test(fmt))
fmt=fmt.replace(RegExp.$, (this.getFullYear()+"").substr( - RegExp.$.length));
for(var k in o)
if(new RegExp("("+ k +")").test(fmt))
fmt = fmt.replace(RegExp.$, (RegExp.$.length==) ? (o[k]) : ((""+ o[k]).substr((""+ o[k]).length)));
return fmt;
}
//下面是具体的示例
var str='2015-01-01 00:00:00';
str=str.replace(/-/g,'/'); //转换为"2015/01/01 00:00:00"
var strT=new Date(str); //转换为Date对象 25 var strInt= strT.getTime(); //返回1970年1月1日至今的毫秒数(提醒:如果深究一下,这里指的是标准的格林威治时间,在中国可以验证,1970-01-01 00:00:00返回的毫秒数是-28800000,即-8小时,这是由于中国是第8时区所以比0时区晚8小时) var t1=strInt-; //减去30秒(注意单位是毫秒,所以是30000)
var t2=strInt+; //加上30秒 var objDate=new Date(); //声明一个Date对象,为的是使用该对象的setTime()方法,此时objDate对象没有具体值
31
objDate.setTime(t1); //根据毫秒数转换为具体时间,这里会返回格林威治时间格式“Wed Dec 31 2014 23:59:30 GMT +0800(中国时间)” (提醒:Date对象每次调用setTime()方法都会改变该对象本身的值,现在的objDate已经不是空值了,这与上面C#示例中的DateTime.AddSeconds()方法是不同的)
var sTime=objDate.Format("yyyy-MM-dd hh:mm:ss"); //调用上面meizz的Date对象的Format()方法转换为标准的字符串格式“2014-12-31 23:59:30”
objDate.setTime(t2); //类似,返回格林威治时间格式
var eTime=objDate.Format('yyyy-MM-dd hh:mm:ss'); //转换为标准字符串格式 alert('sTime类型:'+typeof(sTime)+',值为:'+sTime+'\neTime类型:'+ typeof(eTime)+',值为:'+eTime);
输出结果:
结束语:他山之石,可以攻玉。这里记录的只是对秒的操作,其他的对年月日时分的操作方法也与此类似。
前端和后台对时间数值的增减操作(JavaScript和C#两种方法)的更多相关文章
- 实验04——java保留小数的两种方法、字符串转数值
package cn.tedu.demo; import java.text.DecimalFormat; /** * @author 赵瑞鑫 E-mail:1922250303@qq.com * @ ...
- 在shell script中进行数值运算的两种方法
方法1:使用"$((计算式))"的方式进行数值运算,不需要使用declare命令显示声明数值型变量来存储计算结果: 方法2:使用declare命令配合"-i"选 ...
- 用easyui从servlet传递json数据到前端页面的两种方法
用easyui从servlet传递json数据到前端页面的两种方法 两种方法获取的数据在servlet层传递的方法相同,下面为Servlet中代码,以查询表中所有信息为例. //重写doGet方法 p ...
- AE工程渲染的时间缓慢,两种方法减少对AE工程渲染的时间!
AE工程渲染的时间缓慢,两种方法减少对AE工程渲染的时间!3秒的片头,渲染时间竟然要花1个多小时,很多新手都产生过这样的疑问?是哪里不对吗?如何才能减少渲染视频的时间?且听我一一道来.主要原因是:工程 ...
- 前端跨域问题相关知识详解(原生js和jquery两种方法实现jsonp跨域)
1.同源策略 同源策略(Same origin policy),它是由Netscape提出的一个著名的安全策略.同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正 ...
- ASP.NET后台中调用前台Javascript函数的几种方法
做web开发,用的技术是aspx.net,可是由于比较习惯于ASP现在做起来,觉得非常别扭,原因在于有很多功能其实在前台可以处理的,但是因为用到了很多webcontrol,导致不断postback.如 ...
- 实现iOS长时间后台的两种方法:Audiosession和VOIP(转)
分类: Iphone2013-01-24 14:03 986人阅读 评论(0) 收藏 举报 我们知道iOS开启后台任务后可以获得最多600秒的执行时间,而一些需要在后台下载或者与服务器保持连接的App ...
- 实现iOS长时间后台的两种方法:Audiosession和VOIP
http://www.cocoachina.com/applenews/devnews/2012/1212/5313.html 我们知道iOS开启后台任务后可以获得最多600秒的执行时间,而一些需要在 ...
- 前端调用后台接口下载word文档的两种方法
1传统的ajax虽然能提交到后台,但是返回的数据被解析成json,html,text等字符串,无法响应浏览器下载.就算使用bob模拟下载,数据量大时也不方便 废话不多说:上代码(此处是Layui监听提 ...
随机推荐
- CentOS 配置防火墙操作实例(启、停、开、闭端口):
CentOS 配置防火墙操作实例(启.停.开.闭端口): 注:防火墙的基本操作命令: 查询防火墙状态: [root@localhost ~]# service iptables status< ...
- TAP/TUN浅析(一)
参考链接:https://www.ibm.com/developerworks/cn/linux/1310_xiawc_networkdevice/ TAP 设备与 VETH 设备 TUN/T ...
- ==与equals的区别
==比较两个对象在内存里是不是同一个对象,就是说在内存里的存储位置一致.两个String对象存储的值是一样的,但有可能在内存里存储在不同的地方 . ==比较的是引用而equals方法比较的是内容.pu ...
- HTML/CSS总结1
1.定义网页背景颜色 <body bgcolor="背景色"> 颜色可以用2种方式表示:1. 直接指定颜色名称,如blue.2.使用十六进制数据表示如#RRGGBB,分 ...
- STM32 ADC 测电压
1. STM32F103 ADC 本例使用STM32F103芯片的PA1引脚测试模拟输入的电压值. 查看文档<STM32F103X.pdf>第31页,引脚定义图: 得知PA1使用ADC1的 ...
- Extjs 源码组成(4.0.7)
(function(){})()形式的自执行,构建Ext对象(0~584) 1 设置全局对象EXt:global.Ext = {}, 2 实现了Ext对象面向对象编程的基础方法,如,apply,ex ...
- Linux mount的使用
大家在使用Linux系统的时候,肯定用过一些共享文件的东西,比如FTP,Mount 等等,接下来我重点说一下Mount的用法: 现在有一台测试环境上面需要部署Mount服务器(10.10.10.27) ...
- Python:dict用法
dict全称dictionary,使用键-值(key-value)存储,有极快的查找速度. 以下整理几种常用的dict用法 定义 空dict >>> dict={} 普通dict & ...
- guava学习--monitor
转载:https://my.oschina.net/realfighter/blog/349924 https://my.oschina.net/realfighter/blog/349926 M ...
- Mysql主数据库+备份数据库部署教程
转:http://www.111cn.net/database/mysql/76450.htm 本文我们来讲讲Mysql主备如何部署,这里说的主是指Mysql主数据库,备是从数据库,备可以是多个,也可 ...