关于项目中一些时间转换的问你题

 

    这个已经是 第三次提交了

    第一次信心满满的谢了一遍 因为有些事情的原因 不得不回家 忘记提交 到家有修改了一下 提交 直接跳转到了登陆页面 让俺后心理阴影面积瞬间澎爆

    今天早上起来晚了 走的匆忙 结果忘记带笔记本充电器 关于写东西 投入的时候什么都忘了 写到2/3的时候直接关机了 欲哭无泪呀

    

    第三次写 希望不会再有状况 心情比较糟乱 语言组织的估计不会太好 希望大家见谅 这是我第一次分享项目心得 大家不要在意那些富华的文笔哈 小经验希望能够带爱给写类似模块的小伙伴 愿小伙伴们

  少走弯路 下次分享也需要好久 可能要12月之后哈 最近比较忙

 

    这次我们开发的是一个crm的小项目 属于一个简单的教育管理系统 小伙伴们都非常努力 关于别人的模块 我就不讲了 我水平比计较一般 本来说是负责两个模块的 结果因为前台代码 出现了很多bug 最

  后只写了一个模块 这是一个简单的日常管理模块 就两个小分支 一个是工资管理 一个是考勤管理 对于工资管理 虽然按也有一些小心得 但没什么技术含量 就不好说了

    

    现在就说说考勤管理吧 在基本的单位官网上 内部员工对于签到这个选项 大家都不会陌生 虽然你现在是指纹打卡 不需要自己打开电脑操作了 原理是一样的 只是具体优化了员工的识别功能

 

    首先 说道打卡吧 这就要说一下 具体分析了 很多单位上下班是统一的 这没什么好说的 也有一些单位根据角色细化了考勤规范 这次我就这么说说吧 这是 一个角色到员工的O2M关系( 1对多) 

 

    既然在业务上产生过了关系 对于广泛使用的关系型数据库来说 就意味着可以存在这么一张表 用于这种规范的约束 于是创建了下面这张表 字段命名不太规范 大家权且当做这很规范的样子哈

 

  

 

    表中的两个字段 在java中的样式 也见识patten="HH:ss:mm"

    

    关于 考勤  这在很多公司里是一个业绩考核的重要依据 对于月底的 工资也由一定的影响  

  对于考勤 会对签到做出状态和时间的记录 对于未在外办公的员工珩要有一个补签的功能 

 

  

 

    这其中就要有 以下几个注意的地方 

  这条数据的作用时间 也就是考勤日期 对于签到而言是当前时间 对于补签 就是要补签的日期 考勤时相对于一天而言 格式yyyy-MM-dd

  对于上下班的签到而言 我们只在乎时分秒的比对 格式为HH:ss:mm

  对于补签而言我们在乎的是具体的时间 瞬间 格式为yyyy-MM-dd HH:sss:mm

 

    java 中时间的类型为yyyy-MM-dd HH:sss:mm 这是通俗的格式 无论你怎么创建 都会被转换为这个样式 业务上对于不关系的 我们  就要有所取舍 时间的操作 是一个比较头疼的问题 当我们创建出来的

  时候 就不得不考虑业务上的那些状况 在数据存储的时候 我们要把一个创建的时间按照希望存进数据库 那就离不开这么两个标签

  @DateTimeFormat  这个标签是存在数据库用的 叫入参
  @JsonFormat  这是从数据看取出时间对象用的  叫出参

  

  

 

    这样我们在存储的 时候不会出错  在sql中 或者是也去的Controller中已悄然存在是时间比对上的问题

  问题会有这么些 

      数据库获取的规则scopsetime的是时分秒 当前试打卡时间是在打卡的时候先比对才进行存储的 创建的时间是完整格式 

    如果比对 就要三次进行比较 分别取出十分秒 比较麻烦 经过思考 最后我觉得写个工具类比较好 

 

    

    

    

    这儿存在一个bug 不过对于我们的项目不影响 就没有修改 如果使用的话 请判断一下replacede 首字母是否为0在使用

    if(replace.aharAt(0) =='0'){

      return replace = replace.replace("0,"");

    }

    

    在sql中 如果时间取出的样式 不一样 就无法比较取值 在我们考虑是否可补签的时候这是个等式关系 比较麻烦 时间比对 对于等式 sql 没有一点技巧 这样的函数 也不好好找 我查看了好多博客才找到的

    

    获取当前主体对象  然后比对日期 是否可以补签 还有一个小现象要注意 在获取参数的时候过滤掉将来时间 这样的伪数据没必要在调用方法去数据库查询 写代码节约数据库的调用很重要 能业务上不去

  访问数据库实现最好不要去访问数据库

    这个在工资模块去获取考勤统计数据的时候回很无奈 可以传统的进行年月日比较 这是大于小于 的非等比较 也可以利用等式

    

    当然也可以使用样式 转换成 一样的额格式进行对比

    

    

    

    当然也可以前台页面进行比对 这个稍微麻烦点儿 我js写的不好 就提供一些方法吧

    

    js中获得当前时间
      
     //以下是搜到的有用内容:
     var date=new Date;
    myDate.getYear(); //获取当前年份(2位)
    myDate.getFullYear(); //获取完整的年份(4位,1970-????)
    myDate.getMonth(); //获取当前月份(0-11,0代表1月)
    myDate.getDate(); //获取当前日(1-31)
    //注意,year.toString()+month.toString()不能写成year+month。不然如果月份大于等于10,则月份为数字,会和年份相加,如201210,则会变为2022,需要加.toString()
    myDate.getDay(); //获取当前星期X(0-6,0代表星期天)
    myDate.getTime(); //获取当前时间(从1970.1.1开始的毫秒数)
    myDate.getHours(); //获取当前小时数(0-23)
    myDate.getMinutes(); //获取当前分钟数(0-59)
    myDate.getSeconds(); //获取当前秒数(0-59)
    myDate.getMilliseconds(); //获取当前毫秒数(0-999)
    myDate.toLocaleDateString(); //获取当前日期
    var mytime=myDate.toLocaleTimeString(); //获取当前时间
    myDate.toLocaleString( ); //获取日期与时间
    
    前台页面显示星期的js小代码 如下 应该没有bug
    
 
    最后提供一个常识 在进行where后对条件比较的时候 使用< > 可能会报错 把前面的连接符and小写换成AND大写就好了
    当然也可以使用比较符 注意 这些比较符前面要加&(与) 后面要加;(分号)
     

    

    

    

    

  

  

posted @ 2017-10-30 17:09  螽斯羽  阅读(200)  评论(0编辑  收藏  举报