开发工具与关键技术:VS ASP.NET.MVC
作者:冉冉
撰写时间:2019年06月25日
有时候在页面中需要获取到准确的日期然后以年月日(时分秒)这种格式显示在页面上,但是没有经过格式化的日期或者时间并不是以这种格式显示的,它显示的只是一段字符串。
如果时间类型直接使用JSON进行返回就会出现一个问题,如下图:
图1
时间类型被JSON序列化后就变成了上图中的出生日期、出生时间、入学时间那样的形式存在,完全看不出来是时间类型。所以我们要解决这个问题。解决这个问题主要有两个思路,一个是在页面对格式进行处理;另一个是直接在控制器进行处理。
现在写的是在页面对格式进行处理:
首先说一下类型关系:数据库中的date与datetime类型映射到C#中是DateTime类型(年、月、日、时、分、秒都有);数据库中的time与timestamp类型映射到C#中是TimeSpan类型(主要是日期状态,代表的是时间差)。
通过自定义方法来格式化时间类型,方法如下图:
图2
把JSON格式的时间类型传递进来然后把Date用replace方法替换为空,相当于把图1 中的/Date(929462400000)/数字部分取出来;第二步判断正负,判断indexOf用来切割在一些特殊情况下出现的日期的特殊符号(“+”“-”),一般情况下很难出现但是可能会出现,如果出现这种情况我们就会把在“+”或“-”之前的具体数字取出来。
接下来把它转成日期类型:先用parseInt转成整型,然后把它作为参数传给Date类转成日期类型。获取到它的月数和天数,如果月数和天数小于10那么就在该月数或者天数之前加上0,如果大于10 就正常返回。然后开始拼接字符串,用“-”分割。最后判断如果isDateTime不为空,不等于undefined或者它为真那么再把时分秒拼接上去,如果isDateTime 没有或者为假就不用拼接时分秒。
然后调用这个方法:
图3
结果如下图:
图4
还有一种比较特殊的:就是返回TimeSpan类型的,这个相对于以上两个来说更简单一点。上面两个需要转换成日期类型然后再拼接字符串,而这个不需要,直接就可以拼接字符串了。如下图:
图5
有一点是和上面两个一样的,就是获取值之后判断是否大于10,大于就输出当前值,否则就在当前值的前面加“0”。结果如下图:
图6
这样,在js中格式化时间的就完成了,如果有地方写得不对或者有其他问题请在评论区评论,我会及时更正的!