zoukankan      html  css  js  c++  java
  • 前端和后台对时间数值的增减操作(JavaScript和C#两种方法)

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

    应用背景:

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

    目标:

    以时间格式的字符串“2015-01-01 00:00:00”为例,返回该时间点前30秒和后30秒的时间格式的字符串。

    前端和后台其实都可以实现,只是方法不同而已。

    后台(C#)实现方法:

    1   string str = "2015-01-01 00:00:00";
    2   DateTime dt = Convert.ToDateTime(str);//转换为DateTime对象,进而调用其相关方法
    3 
    4   string sTime = dt.AddSeconds(-30).ToString("yyyy-MM-dd HH:mm:ss");//前30秒(提醒:这里的小时用的是HH,返回结果是24小时制;如果使用hh,返回的是12小时制,有兴趣可以试一下)
    5   string eTime = dt.AddSeconds(30).ToString("yyyy-MM-dd HH:mm:ss");//后30秒(提醒:C#中DateTime的AddSeconds()方法只返回处理结果而不改变DateTime对象原始值,所以这里的dt还是“2015-01-01 00:00:00”,这一点与下面的JavaScript方法是有区别的)
    6   Console.WriteLine(sTime);//输出:"2014-12-31 23:59:30"
    7   Console.WriteLine(eTime);//输出:"2015-01-01 00:00:30"
    8 

    输出结果:

    前端JavaScript实现方法:

     1   //先引用一下CSDN大神meizz对Date对象添加的一个Format方法
     2   Date.prototype.Format = function(fmt)   
     3   { //author: meizz   
     4       var o = {   
     5         "M+" : this.getMonth()+1,                 //月份   
     6         "d+" : this.getDate(),                    //
     7         "h+" : this.getHours(),                   //小时   
     8         "m+" : this.getMinutes(),                 //
     9         "s+" : this.getSeconds(),                 //
    10         "q+" : Math.floor((this.getMonth()+3)/3), //季度   
    11         "S"  : this.getMilliseconds()             //毫秒   
    12       };   
    13       if(/(y+)/.test(fmt))   
    14           fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));   
    15       for(var k in o)   
    16           if(new RegExp("("+ k +")").test(fmt))   
    17         fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));   
    18       return fmt;   
    19   }
    20   //下面是具体的示例
    21   var str='2015-01-01 00:00:00';
    22   str=str.replace(/-/g,'/');  //转换为"2015/01/01 00:00:00"
    23   var strT=new Date(str);  //转换为Date对象   
    24             
    25   var strInt= strT.getTime();  //返回1970年1月1日至今的毫秒数(提醒:如果深究一下,这里指的是标准的格林威治时间,在中国可以验证,1970-01-01 00:00:00返回的毫秒数是-28800000,即-8小时,这是由于中国是第8时区所以比0时区晚8小时)
    26             
    27   var t1=strInt-30000;  //减去30秒(注意单位是毫秒,所以是30000)
    28   var t2=strInt+30000;  //加上30秒
    29             
    30   var objDate=new Date();  //声明一个Date对象,为的是使用该对象的setTime()方法,此时objDate对象没有具体值
    31
    32 objDate.setTime(t1); //根据毫秒数转换为具体时间,这里会返回格林威治时间格式“Wed Dec 31 2014 23:59:30 GMT +0800(中国时间)” (提醒:Date对象每次调用setTime()方法都会改变该对象本身的值,现在的objDate已经不是空值了,这与上面C#示例中的DateTime.AddSeconds()方法是不同的) 33 var sTime=objDate.Format("yyyy-MM-dd hh:mm:ss"); //调用上面meizz的Date对象的Format()方法转换为标准的字符串格式“2014-12-31 23:59:30” 34 objDate.setTime(t2); //类似,返回格林威治时间格式 35 var eTime=objDate.Format('yyyy-MM-dd hh:mm:ss'); //转换为标准字符串格式 36 37 alert('sTime类型:'+typeof(sTime)+',值为:'+sTime+' eTime类型:'+ typeof(eTime)+',值为:'+eTime);

    输出结果:

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

  • 相关阅读:
    MFC菜单、工具栏和状态栏
    MFC控件
    MFC对话框
    MFC消息映射机制
    性能优化可使用的工具
    常见的内存问题分析思路
    k8s之Probe
    docker swarm
    keepalived配置虚拟ip(vip)实现双机热备以及自动切换主备
    linux安装openjdk1.8
  • 原文地址:https://www.cnblogs.com/mzyj/p/4641525.html
Copyright © 2011-2022 走看看