时间:2015-03-9 作者:剧中人
在前端渲染页面(或列表)中,常常会涉及到时间的显示。通常做法是直接输出时间字段,如:"2015-03-09 13:30:57"
。
然而实际项目却是,同一个ajax请求会有不同的脚本会去调用,不同的页面的展示形式也不尽相同,比如会有这样:"13:30 2015年3月9日"
。
于是精明的后端小伙伴在将时间以这种方式传递过来:1425879057705
。相信这个玩意儿大伙儿都知道,叫时间戳。单纯的表示时间,不包含任何显示样式。
前端童鞋们见到后端小伙伴这么热心的提供时间戳,于是殷勤地献上了菊花,哦不,是代码。
/**
* 这里演示的是一个列表中的某一项(item),时间以time为字段传递过来
* 显示字段为screen_time,样式为 13:30 2015年3月9日
**/
var date = new Date(item.time);
item.screen_time = date.getHours() + ':' + date.getMinutes() + ' ' + (date.getYear()+1900) + '年' + (date.getMonth()+1) + '月' + date.getDate() + '日';
很开森有木有,接着,有个处女座小伙伴提了个建议,列表内容比较多,而且时间这个字段并不是很重要,能不能给它弱化一点捏?
这个简单简单,最终大伙儿决定将时间改为这样:2015-03-09 13:30
。哈哈,这难不倒我小前端,调下代码分分钟的事儿。
var date = new Date(item.time);
item.screen_time = (date.getYear()+1900) + '-' + (date.getMonth()+1) + '-' + date.getDate() + ' ' + date.getHours() + ':' + date.getMinutes();
貌似有个小细节没有实现,要求显示:2015-03-09 13:30
,但这段代码却输出为:2015-3-9 13:30
。小姑娘又在叫啦,伦家要的不是介个样纸嘛!
莫急莫急,我再给每个数字加个长度判断。
var date = new Date(item.time);
function adaptLength(input){
return parseInt(input) < 10 ? '0' + input : input;
}
item.screen_time = (date.getYear()+1900) + '-' + adaptLength(date.getMonth()+1) + '-' + adaptLength(date.getDate()) + ' ' + adaptLength(date.getHours()) + ':' + adaptLength(date.getMinutes());
小姑娘开森啦,小前端却被绕成狗了,谁能告诉我代码怎么被写成这个样纸了,这一坨代码,如果没有注释,谁TMD知道显示结果是啥样的。
不行不行,我要给优化优化。终于在众屌拥抱硬盘的夜晚,小前端独自完成了这个简单的时间格式化的方法,为以后撸其他代码节省了一大把时间。刷牙睡觉,睡觉。
很简单,仅仅是一个function
而已,只需要传入一个时间参数(时间戳 or Date对象)、一个显示模版即可渲染出对应的时间样式。
显示模版中,变量重复,表示使用两字节长度显示,如:2015-03-09
。
/**
* @param (timestamp/Date,'{y}-{m}-{d} {h}:{i}:{s}')
* @param (timestamp/Date,'{y}-{mm}-{dd} {hh}:{ii}:{ss}')
*
* y:year
* m:months
* d:date
* h:hour
* i:minutes
* s:second
* a:day
*/
function parseTime(time,format){
if(arguments.length==0){
return null;
}
var format = format ||'{y}-{m}-{d} {h}:{i}:{s}';
if(typeof(time) == "object"){
var date = time;
}else{
var date = new Date(parseInt(time));
}
var formatObj = {
y : date.getYear()+1900,
m : date.getMonth()+1,
d : date.getDate(),
h : date.getHours(),
i : date.getMinutes(),
s : date.getSeconds(),
a : date.getDay(),
};
var time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g,function(result,key){
var value = formatObj[key];
if(result.length > 3 && value < 10){
value = '0' + value;
}
return value || 0;
});
return time_str;
}
PS:代码很简单,也可能你有更精妙的实现方法,这都不重要。
重要的是这里的小前端,面对新事物和反复的小纠结,充满兴趣,从不抱怨。
PPS:记录一年半之前,小剧经历的一个销魂的夜晚!