话说前端日期的处理,我总结了Thymeleaf跟JavaScript的实战对比,咱们就一块儿聊聊吧。这01Thymeleaf这块儿啊,主要是在服务器渲染阶段动手脚,直接给浏览器发一个已经格式化好的当前日期。就是这么简单,用一行代码就能搞定“yyyy年MM月dd日”的显示效果:直接把一个HTML标签写好。这里面是两件事儿,先取个当前的时间戳,然后用日期格式化工具把这个时间戳弄成那种格式的字符串。这么做的好处是服务器都帮你算好了本地格式和显示形式,浏览器就不用再费心思处理时间了,性能开销小得很。 但是缺点也挺明显的,如果页面上需要那种动态刷新的效果,比如倒计时啥的,就得重新请求服务器才能变数字了。所以不能做到那种“零刷新”的效果。 再说02Thymeleaf那边处理参数这一块的事儿吧。当URL带了参数过来的时候,Thymeleaf也能直接把这些参数渲染到页面上显示出来。比如说前端通过表单或者链接传了一个叫startDate的参数,在页面里随便找个标签就能直接拿过来用了:直接写进HTML里就行。这里的param对象就是Servlet的那个getParameter的封装版,直接拿来用就行。 这个方法的优点是参数值在服务器端都已经校验过了,页面上就不用再二次验证一遍了。但是呢缺点就是如果要对参数值做进一步加工处理,比如限制格式啥的,还是得在服务器那边先完成好才能传过去给前端显示用。 到了03JavaScript这端处理日期的时候就不一样了,主要是在客户端这边来做文章。如果服务器只给了一个时间戳或者你想让用户自己去定义显示格式的话,就非得靠JavaScript来搞不可。我给大家整理了一段“字符串转日期”和“日期格式化”的小工具函数,就像这样写好了。 这个函数先把字符串转成Date对象(用eval把字符串变成对象),然后格式化成想要的样子。这里面获取年份是用getFullYear()函数获取的月份是getMonth()获取后还要加1(因为这个函数是从0开始数的)。这就好比做个表格处理这样的事儿。 用这个方法最大的好处就是客户端自由度特别高,支持动态刷新、国际化还有秒级更新。 但缺点也不少:首先需要把字符串解析成Date对象,对一些乱七八糟或者非法的日期字符串处理起来容易出错;还有每次调用eval都会有一点点性能损耗。