问题描述
我可以在Bokeh表中为日期格式化程序进行静态选择
TableColumn(field=xdata,title=xdata,formatter=DateFormatter(format="%a,%e %b %y")),
但是我想做些更动态的事情,如果距离当前时间少于几小时,则显示一天中的时间,否则显示完整的日期(天+时间)
其他问题似乎取决于条件,诸如此类,因此我找不到一个真正适合此问题的问题。
解决方法
我做这件事的丑陋JS如下
template="""
<%= (
function nameless()
{
function shortenDateTime(inputDate /* Date() */,threshold /*[seconds]*/) {
function farAway(present /* integer unit epoch */,past /* integer unit epoch */) {
if ( present - past > threshold*1000){
return true;
} else {
return false;
}
}
// get a new date (locale machine date time)
var now = new Date();
var now_epoch = now.getTime();
inputDate_epoch = inputDate.getTime();
date = inputDate.toDateString();
time = inputDate.toLocaleTimeString();
if (farAway(now_epoch,inputDate_epoch)) {
return date + ' ' + time;
} else {
return time;
}
};
var _date = new Date(value);
return shortenDateTime(_date)
}()
) %>;
"""
然后必须从HTMLTemplateFormatter
定义格式器
formater = HTMLTemplateFormatter(template=template)
并将其用于列的定义
TableColumn(field=xdata,width=22,title=xdata,formatter=formater),
我唯一剩下的问题与:
- 在输出
;
的末尾删除12:09:33;
- 真的有必要使用我对
nameless()
的定义所做的技巧吗?