介绍
在网页中,时间戳的显示是一个非常常见的需求,但是不同的场合需要的时间格式也不同,比如有时候需要精确到秒,有时候需要更加友好的时间显示方式。本文介绍如何利用layui实现同页面显示多种时间样式的功能。
利用Layui的laytpl模块
laytpl模块简介
layui是一个基于jQuery的模块化前端UI框架,内部自带了一个laytpl模块,可以用于实现模板引擎的功能。laytpl的具体用法和其他模板引擎类似。
实现原理
在模板中声明好时间显示的格式,而后通过laytpl模块进行模板渲染。需要注意的是,模板中要使用对应的日期格式符,否则渲染出来的时间格式会不对。
<div class="time-container">
{{# if (timestamp != 0) { }}
<div>{{ layui.laytpl.toDateString(timestamp, "yyyy-MM-dd hh:mm:ss") }}</div>
{{# } }}
<div>{{ layui.laytpl.toFriendlyDateString(timestamp) }}</div>
</div>
上面的代码片段就是一个模板,在模板中声明了两种时间显示格式,一种是精确到秒的日期格式(yyyy-MM-dd hh:mm:ss),一种是更加友好的时间显示方式。在实际使用中,可以根据实际需求传入不同的timestamp参数,laytpl模块会根据模板渲染出相应的HTML代码。
具体实现过程
HTML结构
首先需要在HTML页面中定义好模板的代码结构,一般可以放在一个隐藏的div中,例:
<div id="time-template" style="display: none;">
<div class="time-container">
{{# if (timestamp != 0) { }}
<div>{{ layui.laytpl.toDateString(timestamp, "yyyy-MM-dd hh:mm:ss") }}</div>
{{# } }}
<div>{{ layui.laytpl.toFriendlyDateString(timestamp) }}</div>
</div>
</div>
渲染HTML代码
利用laytpl模块渲染HTML代码,将渲染好的HTML代码插入到需要显示时间的位置。可以通过jQuery等工具库来获取到相关dom节点。
例:
// 获取模板节点
var tpl = $('#time-template').html();
// 渲染HTML代码
var html = layui.laytpl(tpl).render({timestamp: 1524473977782});
// 将HTML代码插入到页面中指定的位置
$('#container').html(html);
上面的代码中,timestamp是需要显示的时间戳,可以根据实际需求进行传递。利用laytpl模块渲染模板生成的HTML代码,将其插入到指定的容器元素中即可。
完整代码
以下是一个完整的示例代码,用于展示如何利用layui实现同页面显示多种时间样式的功能:
<div id="time-template" style="display: none;">
<div class="time-container">
{{# if (timestamp != 0) { }}
<div>{{ layui.laytpl.toDateString(timestamp, "yyyy-MM-dd hh:mm:ss") }}</div>
{{# } }}
<div>{{ layui.laytpl.toFriendlyDateString(timestamp) }}</div>
</div>
</div>
<!-- 需要显示时间的位置 -->
<div id="container"></div>
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script src="https://www.layuicdn.com/layui/layui.all.js"></script>
<script>
// 获取模板节点
var tpl = $('#time-template').html();
// 渲染HTML代码
var html = layui.laytpl(tpl).render({timestamp: 1524473977782});
// 将HTML代码插入到页面中指定的位置
$('#container').html(html);
</script>
上面的代码会将时间戳1524473977782渲染为如下形式的HTML代码:
<div id="container">
<div class="time-container">
<div>2018-04-23 14:46:17</div>
<div>1天前</div>
</div>
</div>
可以看到,显示了两种不同的时间格式。
总结
利用Layui的laytpl模块可以非常方便地实现同页面显示多种时间样式的功能,其原理在于将需要显示时间的节点嵌入到模板中,用laytpl模块进行渲染后插入到页面中。需要注意的是,模板中要使用对应的日期格式符,否则渲染出来的时间格式会不对。
完整代码已经提供,读者可以自行实践尝试。