`
heartnn
  • 浏览: 34858 次
  • 性别: 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动态生成时间

    通过上述分析,我们可以看到使用JavaScript动态生成并实时更新时间是一个相对简单的过程。主要涉及到了Date对象的基本使用以及定时器的相关知识。这种方法非常适合用于实时显示当前时间的应用场景,如计时器、倒计时...

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

    1. **相对时间范围**:此插件允许用户选择相对时间范围,如“一周前”或“一个月后”。这种功能对于数据分析、报告生成或者事件计划等应用场景非常有用,因为它使得用户能够快速设定时间区间而无需精确到具体的日期...

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

    在IT行业中,前端开发经常涉及到日期和时间的处理,尤其是在展示信息时,我们通常希望以更人性化的方式显示时间,比如使用“几分钟前”、“几小时前”这样的相对时间,而不是精确到秒的具体日期。jQuery liveTimeAgo...

    Eloquent JavaScript — A Modern Introduction to Programming

    虽然JavaScript对于初学者来说相对容易上手,但它不仅止于玩具般的简单,而是一个灵活且复杂的语言,能够用来构建完整的应用程序。本书通过沉浸式的教学方法,配合实例代码,鼓励读者从一开始即进行实验,迅速掌握...

    JavaScript万年历

    JavaScript万年历是一款基于...通过学习这个项目,开发者不仅可以提升JavaScript编程技能,还能深入了解历法、天文学和时间计算。ChineseAlmanac.js文件很可能是实现这些功能的核心代码,值得仔细研究和学习。

    将具体时间转换为模糊相对时间的jQuery工具

    "将具体时间转换为模糊相对时间的jQuery工具"正是这样一个解决方案,它旨在提升用户体验,让用户更易于理解和感知时间信息。 模糊相对时间(Relative Time)是一种常见的UI设计技巧,也被称为“人类可读时间”或...

    JavaScript教程

    总的来说,JavaScript是一门相对简单的语言,它的核心概念包括过程式编程、简单的面向对象机制、动态类型和灵活的数据结构。随着时间的发展,JavaScript已经发展出了许多现代特性,如ES6及其后续版本引入的箭头函数...

    Introduction to JavaScript Part 1

    - **易学性**:对于初学者来说,JavaScript语法相对简单,学习曲线较为平缓。 - **灵活性**:不仅可以用于前端开发,也可以结合后端框架(如Node.js)进行全栈开发。 - **广泛的应用场景**:适用于各种类型的网页...

    javascript框架的优缺点

    但它作为相对较新的框架,可能还需要时间来完善和成熟。 七、ExtJS ExtJS是最全面的JavaScript框架之一,几乎可以满足所有Web开发界面需求。它适用于创建复杂的Ajax应用和自定义组件。但ExtJS的缺点是页面加载速度...

    采用JavaScript统计用户在网页的停留时间代码

    ### 使用JavaScript统计用户在网页上的停留时间 #### 知识点概述 本篇文章将详细介绍如何使用JavaScript来统计用户在一个网页上的停留时间。该方法通过设置定时器的方式不断更新时间值,并将其显示在页面上,同时...

    李炎恢JavaScript讲义合集(全部173页pdf)

    虽然入门相对简单,但是要达到精通的程度,需要对JavaScript的语法、API、框架以及现代Web开发的最佳实践有深入的理解和不断的实践。随着时间的推移,JavaScript已经发展成为一种功能丰富、应用广泛的编程语言,不...

    javascript主题图片滚动

    6. **CSS布局**:为了实现图片的水平或垂直滚动,我们需要了解和应用CSS布局,如`position`(相对、绝对、固定定位)、`float`、`display`(如`flex`或`grid`布局)等属性。 7. **响应式设计**:考虑到不同设备和...

    JavaScript时间格式化插件,返回指定字符串

    在JavaScript中,原生的Date对象虽然提供了基本的时间处理功能,但其输出格式相对固定,不能满足所有场景的需求。因此,时间格式化插件应运而生,它们通常提供更丰富的格式选项和易用的API,以适应各种用户界面设计...

    【JavaScript源代码】JavaScript中时间格式化新思路toLocaleString().docx

    虽然`toLocaleString()`提供了一种更为简洁的方式来进行时间格式化,但它的功能相对有限,可能无法满足所有格式化的需求。特别是对于那些希望输出像“x年x月x日”这种特定格式的情况,`toLocaleString()`可能还需要...

    javascript初级教程.pdf

    然而,教程的结构和例子相对较少,可能会对理解能力较弱或依赖性强的读者造成困扰,他们可能需要花费更多时间和精力去理解和实践。此外,由于JavaScript的即时编译特性,本教程鼓励读者具备自我实践的能力,因为许多...

    javascript网页特效实例大全

    以上只是部分JavaScript网页特效及其涉及的技术点,实际资源中可能包含更多实例,如翻转效果、平移动画、时间线展示、进度条加载等。通过学习和实践这些实例,开发者可以深入理解JavaScript在创建动态、交互式网页中...

    【JavaScript源代码】JavaScript实现简单的轮播图效果.docx

    虽然在这个例子中CSS代码没有给出,但通常会设置`.slider`的相对定位,`.slider-img`的绝对定位,并通过`overflow: hidden`来隐藏超出视口的图片部分。此外,还会为`.slider-ctrl`中的元素如小圆点和箭头添加样式。 ...

    Javascript导航菜单13则(含部分代码)

    9. **菜单定位与布局**: 菜单的位置可能需要根据页面内容动态调整,JavaScript 可以根据需要计算元素位置,实现绝对定位或相对定位。 10. **异步加载内容**: 对于大型网站,JavaScript 可以实现异步加载子菜单内容...

    javascript经典广告实例代码

    JavaScript可以检测浏览器窗口大小,实现广告元素的相对定位,使其在滚动时始终保持可见。这种技术涉及CSS的position属性和JavaScript的窗口事件,如`resize`。 5. **浮动广告** 浮动广告是跟随用户滚动的广告,常...

    javascript画图

    箭头的绘制相对复杂,通常需要组合使用直线(`moveTo()`, `lineTo()`)、曲线(`quadraticCurveTo()`, `bezierCurveTo()`)以及填充三角形来实现。以下是一个简单的箭头示例: ```javascript // 绘制箭头主体 ctx....

Global site tag (gtag.js) - Google Analytics