`
heartnn
  • 浏览: 33946 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
文章分类
社区版块
存档分类
最新评论

Javascript 相对时间

阅读更多
By galeki

因为相对时间是随时变化的,所以如果在页面里面直接生成相对时间的文本,那么就没法缓存成静态文件,不过用 js 可以解决这个问题。

首先,在页面里面还是用 rails 生成一般的时间,这样即使关掉了 js,也可以显示正常的时间。并套个 span:

<span class="relative_time">
<%= @post.created_at %>
</span>

然后就是 js 的事情了,找出这些 span,并且算出相对时间替换进去:

function show_relative_time(local){
var times = $$('span.relative_time');
var now = new Date();
for(i=0;i<times.length;i++){
var time = times[i];
var t = new Date(time.innerHTML);
var diff = now - t;
time.innerHTML = relative_time_text(Math.floor(Math.abs(diff/1000/60)), local);
}
}

其中的 relative_time_text 接收分钟为参数,返回相对时间的文本:

function relative_time_text(m, local){
var text;
if(!rtlang[local])
local = 'en';

if(m <= 1)
text = rtlang[local]['less than a minute'];
else if(m > 1 && m <= 45)
text = m + rtlang[local][' minutes'];
else if(m > 45 && m <= 90)
text = rtlang[local]['about 1 hour'];
else if(m > 90 && m <= 1440)
text = Math.round(m/60) + rtlang[local][' hour'];
else if(m > 1440 && m <= 2880)
text = rtlang[local]['1 day'];
else if(m > 2880 && m <= 43200)
text = Math.round(m/1440)+ rtlang[local][' days'];
else if(m > 43200 && m <= 86400)
text = rtlang[local]['about 1 month'];
else if(m > 86400 && m <= 525600)
text = Math.round(m/43200) + rtlang[local][' months'];
else if(m > 525600 && m <= 1051200)
text = rtlang[local]['about 1 year'];
else
text = Math.round(m/525600) + rtlang[local][' years'];

return text + rtlang[local][' ago'];
}

基本就是照着 rails 里那函数改的,rtlang 就是个 hash,保存多语言信息:

var rtlang = {'zh_CN':{}, 'en':{}};
rtlang['en']['less than a minute'] = 'less than a minute';
rtlang['en'][' minutes'] = ' minutes';
rtlang['en']['about 1 hour'] = 'about 1 hour';
rtlang['en'][' hour'] = ' hour';
rtlang['en']['1 day'] = '1 day';
rtlang['en'][' days'] = ' days';
rtlang['en']['about 1 month'] = 'about 1 month';
rtlang['en'][' months'] = ' months';
rtlang['en']['about 1 year'] = 'about 1 year';
rtlang['en'][' years'] = ' years';
rtlang['en'][' ago'] = ' ago';

rtlang['zh_CN']['less than a minute'] = '小于一分钟';
rtlang['zh_CN'][' minutes'] = ' 分钟';
rtlang['zh_CN']['about 1 hour'] = '大约 1 小时';
rtlang['zh_CN'][' hour'] = ' 小时';
rtlang['zh_CN']['1 day'] = '1 天';
rtlang['zh_CN'][' days'] = ' 天';
rtlang['zh_CN']['about 1 month'] = '大约 1 个月';
rtlang['zh_CN'][' months'] = ' 个月';
rtlang['zh_CN']['about 1 year'] = '大约 1 年';
rtlang['zh_CN'][' years'] = ' 年';
rtlang['zh_CN'][' ago'] = ' 前';

这样如果要显示中文的相对时间,那么只需在页面尾部加上:

<script type="text/javascript">
show_relative_time("zh_CN");
</script>

就搞定了~
分享到:
评论

相关推荐

    JavaScript详解(第2版)

     9.4.2 操纵日期及时间   9.4.3 通过prototype属性自定义Date对象   9.5 Math对象   9.5.1 向上取整及向下取整   9.5.2 生成随机数   9.5.3 wrapper对象   9.5.4 String对象   9.5.5 Number...

    jqueryliveTimeAgojs是一款可以将具体的日期时间转换为模糊相对时间的jQuery插件

    jquery.liveTimeAgo.js是一款可以将具体的日期时间转换为模糊相对时间的jQuery插件。例如可以将昨天的某个具体时间转换为“1天以前”,可用于显示文章发布时间等场合。

    dateRanges二次封装时间选择插件相对绝对时间范围选择

    dateRanges 二次封装时间选择插件,相对绝对时间范围选择。包含功能:单周,双周,单月,季度,自定义范围选择。

    time-descriptor:JavaScript的时间实用程序

    时间描述符该软件包旨在更好地可视化相对时间声明。 import { MINUTES , SECONDS , inDays } from "time-descriptor" ;const start = Date . now ( ) ;setInterval ( ( ) =&gt; { // Days running console . log ( ...

    dotago.js:使用Javascript创建相对日期和持续时间的愚蠢语法糖

    使用Javascript创建相对日期和持续时间的愚蠢语法糖 处理日期: // now: 2020-06-18T10:00:00Z 1. . minute . ago . asDate // 2020-06-18T09:59:00Z 2. . hours . ago . asDate // 2020-06-18T08:00:00Z 3. . ...

    timerizerJS:在 JS 中处理相对时间的库

    一个简洁的小实用程序,用于在 JavaScript 中处理相对时间。 ( 2 ) . days . ago ( ) ; // Sat Jan 03 2015 18:00:00 GMT+0000 (GMT) 整洁的。 我从窃取了名称,它是用 Ruby 编写的,基于 Ruby on Rails 的 ,...

    时间选择控件-美观-易用

    美观的JavaScript日期控件,时间控件,支持自定义,易修改,兼容所有浏览器,移动端,方便快捷,功能强大。

    twas生成相对时间字符串例如3秒前

    twas生成相对时间字符串例如3秒前

    relative-time:javascript函数将时间戳或日期转换为本地相对时间

    将时间戳或日期转换为本地相对时间特征: 超轻量级(最小&lt; 500 bytes ) 使用本机浏览器API安装: 从使用/从此下载/ npm i @yaireo/relative-time -S用法: 通过JS导入CSS文件import RelativeTime from '@yaireo/...

    :mantelpiece_clock:小(280B)相对时间字符串功能(例如:“ 3秒前”)-JavaScript开发

    twas生成一个相对时间字符串(例如:“ 3秒前”)安装$ npm i -S twas用法import'twas from'twas'; console.log(twas(Date.now()-(5 * 1000)); //-&gt; 5秒前twas Tiny(280B)相对时间字符串函数(例如:“ 3秒...

    javascript常用对象梳理

    [removed] Window For JavaScript 熟练window对象的open、close、alert、confirm、prompt、setTimeout、clearTimeout、setInterval、clearInterval、moveBy、resizeBy、scrollBy方法的使用 掌握window对象的moveTo...

    精通JavaScript

    • 13.7.htm “相对位置”定位 • 13.8.htm “绝对位置”定位 • 13.9.htm z-index属性 • 13.10.htm z-index属性之二 • layerlib.js 跨浏览器DHTML库 • 13.12.htm 跨...

    regex-engine:用JavaScript编写的简单回溯正则表达式引擎

    注意:由于详细记录了源代码,因此本README相对简短。 这是JavaScript中正则表达式引擎的简单实现,该引擎使用传统的“回溯”算法将正则表达式模式与字符串进行匹配。 引擎处理以下特殊正则表达式字符: ^字符串...

    JavaScript 图片滑动切换效果

    首先需要一个容器,程序会自动设置容器overflow为hidden,如果不是相对或绝对定位会同时设置position为relative, 滑动对象会设置为绝对定位: var p = CurrentStyle(this._container).position; p == "relative" |...

    relative-time:验证值是否格式化为相对时间

    相对时间 验证值是否格式化为相对时间。 安装 $ npm install validate.io-relative-time 要在浏览器中使用,请使用 。 用法 var isRelativeTime = require ( 'validate.io-relative-time' ) ; isRelativeTime( 值...

    JavaScript的73Ex

    资料库名称: 73-javascript-exercises 模式: solo 挑战类型: learning 持续时间: 1-2 weeks 部署策略:这些练习不需要学习目标在挑战结束时,您将: 能够使用JavaScript进行编码使命该文件夹包含73个练习,分为...

    原生javascript实现拖动元素示例代码

    本文介绍原生javascript实现元素拖动。 思路: 1.首先改变被拖动元素的布局属性,关键是“position:absolue”; 2.捕捉鼠标事件”mousedown”,”mousemove”,”mouseup”; 3.当触发”mousedown”时,记录下当前鼠标...

    relative.time.parser:Moment.js插件,用于解析相对时间字符串

    相对时间解析器插件 该插件将简单的字符串转换为可操纵的矩对象。 字符串格式的灵感来自Graphite的格式。 徽章 安装-NPM npm install relative-time-parser 用法 使用字符串-7d等同于moment().subtract(7, 'days');...

    JavaScript Table行定位效果

    给tr设置relative后就能相对table定位了,看来很简单啊,但问题是这个方法ie8和ff都无效,而且存在很多问题,所以很快就被抛弃了。 ps:该效果用来做tr的拖动会很方便。 接着想到的是给table插入一个新tr,克隆原来...

    javascript异步编程的4种方法

    常见的浏览器无响应(假死),往往就是因为某一段Javascript代码长时间运行(比如死循环),导致整个页面卡在这个地方,其他任务无法执行。为了解决这个问题,Javascript语言将任务的执行模式分成两种:同步...

Global site tag (gtag.js) - Google Analytics