最近在做一个视频回放项目,记录下一点总结。

应用背景:

假设有一个门禁系统记录着门禁的人员进出刷卡信息,门禁装有视频录像设备,现在要根据人员的刷卡时间调出其刷卡时间点前后一段时间的录像。关于视频回放部分具体实现过程较复杂本文不涉及,提一下其中涉及到的对时间数值的增减操作。

目标:

以时间格式的字符串“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);

输出结果:

结束语:他山之石,可以攻玉。这里记录的只是对秒的操作,其他的对年月日时分的操作方法也与此类似。

最新文章

  1. thinkphp succes error跳转模板 设置
  2. [转]clrDateTime to Dynamics AX TransDate
  3. cout 计算顺序问题
  4. Stamps and Envelope Size
  5. 利用Qt调用计算器
  6. RoHS认证简介
  7. dom 规划(html和xml)
  8. C# CacheHelper
  9. Centos7部署Zabbix
  10. PHP 验证码 浅析
  11. js去除数组重复成员
  12. select2插件 多选框动态初始化值
  13. 151. Reverse Words in a String翻转一句话中的单词
  14. 10 sed命令的基本用法
  15. bzoj1098 办公楼
  16. WordPress主题开发:get_term_by和get_term_link
  17. Memcached深入分析及内存调优
  18. mac下Android Studio使用及快捷键
  19. 微软官方的精简版Windows 7——Windows Thin PC
  20. Android中打包JAR时获取资源ID的方法

热门文章

  1. MFC编程入门之二十一(常用控件:编辑框Edit Control)
  2. static修饰的静态内部类
  3. 统计学习中感知机的C++代码
  4. 在ie7中overflow:hidden失效问题及解决方案
  5. mybatis中 ${}和#取值小记(Parameter index out of range)
  6. node.js的优缺点
  7. 四种主要网络IO虚拟化模型
  8. nodejs学习篇
  9. C# in VS
  10. 服务器asp.net 3.5 HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效。