对于与时间所对应的数据字段,在数据库中所使用的数据类型一般都是datetime。用datetime所存储的时间数据格式是这样的:2016-12-28 17:04:21.447
将新增的时间数据精确到毫秒位进行储存,这样做无疑使数据的精确性得到很大的提高。但在系统中查询该类数据时,会出现些问题,这些问题会影响到系统从数据库中所提取出来的数据,这便需要我们去定义几种方法使控制器能对获取到的时间数据更为完善。
问题一:一般来说,除非是客户的特别要求,最常用的也只是用到年月日 - 时分秒这类的时间数据,即datetime储存的前半截数据,时间中的毫秒数据很少会用到,这样的话就需要将数据库中所储存的数据进行分割,不需要毫秒值的话便通过方法过滤掉。
问题二:在数据库中以datetime类型储存的数据,在控制器中查询出来,反馈给页面的时间数据是这个样子的:
在数据库中录入的数据本就不是这种格式的,而是按年月日时分秒的顺序排列的。为什么将数据从数据库中的提取出来,放到页面上后顺序就乱了呢?为此,我还专门在网上查询为何会出现该问题的原因。查到的原因是:因为外国人对时间的使用格式与我们的不一致所导致的,通俗的讲,是因为不同的历史文化习俗所导致的。外国人对时间的使用格式和上图所显示的一致,月份与天数放最前,而年份则靠后显示,最后再轮到时间,AM与PM则是为了区分上午与下午的时间段。毕竟SQL数据库以及 ASP.NET.MVC都是外国人开发出来的,身为使用者的我们唯有尊重别人的文化成果,淡然接受。
当然,接受并不等于就一定要以这种格式的数据去显示时间,要想办法将年份前置,并且把AM的显示去掉,恢复成我们所需要的时间格式。首先要做的自然是先在控制器中对提取出来的时间数据进行顺序调整,接着再到页面定义个方法,通过该方法分割从控制器传递的时间数据,最后再对处理后的数据逐个的绑定到页面的相应单元格中便可。
第一步:对时间格式进行顺序调整
strIssuanceTime = tbCertificate.IssuanceTime.ToString(),
StartTime = tbAchievement.StTime.ToString(),
在获取数据库中的数据时一般都要通过Linq语法来查询出相应的数据,而在查询方法中便可以对获取到的时间进行首次处理,在获取到的数据后加上ToString()方法,使原本为datetime类型的数据格式转化为字符串类型。
第二步:定义方法接收数据并对它进行分割处理
function Certifkicate(Data) {
console.log(Data);//控制台输出
若是对接收到的时间数据不确定其格式的话,可以通过控制台输出对数据进行查看后再进行分割处理:
分割字符串类型的数据时,需要用到JS中的split()方法:该方法专门用户把一个字符串分割成一个字符串数组。通过上图的控制器输出图所示,可以以“/”作为分割的依据,对数据进行处理。
//2016/12/28 PM 11:35:23
var StTime = Data.StartTime;
//对获取到的时间字符串进行分割,按 年 月 日 的格式进行分割
//[“2016”, “12”, “28 PM 11:35:23”]
var StTime1 = StTime.split("/");
//[“28”,“PM”, “01:04:37”]
var StTime2 = StTime1[0].split(" ");
//对获取到的时间字符串进行分割,按 年 月 日 的格式进行分割
//[“2016”,“12”,“29 PM 01:04:37”]
var IsTime = Data.strIssuanceTime.split("/");
//[“29”,“PM”,“01:04:37”]
var IsTime2 = IsTime[0].split(" ");
}
第三步:紧接以上方法继续,将处理后的数据逐一绑定到单元格中
$("#StudentName").text(StudentName);
$("#StTime").text(StTime1[0] + StTime1[1] + StTime2[0]);
$("#IssuanceTime").text(IsTime[0] + IsTime[1] + IsTime2[0]);
完成以上步骤后,启动项目查看结果如何,数据的格式是否会按照所需的格式进行显示: