资讯专栏INFORMATION COLUMN

JS将时间戳转换为刚刚、N分钟前、今天几点几分、昨天几点几分等表示法

DirtyMind / 2500人阅读

方法一:

使用Javascript语言,将时间戳转换为类似新浪微博的时间的表示方法。
要求转换规则:
1分钟以内显示为:刚刚
1小时以内显示为:N分钟前
当天以内显示为:今天 N点N分(如:今天 22:33)
昨天时间显示为:昨天 N点N分(如:昨天 10:15)
当年以内显示为:N月N日 N点N分(如:02月03日 09:33)
今年以前显示为:N年N月N日 N点N分(如:2000年09月18日 15:59)

自定义的转换函数:

function timestampFormat( timestamp ) {
    function zeroize( num ) {
        return (String(num).length == 1 ? "0" : "") + num;
    }
 
    var curTimestamp = parseInt(new Date().getTime() / 1000); //当前时间戳
    var timestampDiff = curTimestamp - timestamp; // 参数时间戳与当前时间戳相差秒数
 
    var curDate = new Date( curTimestamp * 1000 ); // 当前时间日期对象
    var tmDate = new Date( timestamp * 1000 );  // 参数时间戳转换成的日期对象
 
    var Y = tmDate.getFullYear(), m = tmDate.getMonth() + 1, d = tmDate.getDate();
    var H = tmDate.getHours(), i = tmDate.getMinutes(), s = tmDate.getSeconds();
 
    if ( timestampDiff < 60 ) { // 一分钟以内
        return "刚刚";
    } else if( timestampDiff < 3600 ) { // 一小时前之内
        return Math.floor( timestampDiff / 60 ) + "分钟前";
    } else if ( curDate.getFullYear() == Y && curDate.getMonth()+1 == m && curDate.getDate() == d ) {
        return "今天" + zeroize(H) + ":" + zeroize(i);
    } else {
        var newDate = new Date( (curTimestamp - 86400) * 1000 ); // 参数中的时间戳加一天转换成的日期对象
        if ( newDate.getFullYear() == Y && newDate.getMonth()+1 == m && newDate.getDate() == d ) {
            return "昨天" + zeroize(H) + ":" + zeroize(i);
        } else if ( curDate.getFullYear() == Y ) {
            return  zeroize(m) + "月" + zeroize(d) + "日 " + zeroize(H) + ":" + zeroize(i);
        } else {
            return  Y + "年" + zeroize(m) + "月" + zeroize(d) + "日 " + zeroize(H) + ":" + zeroize(i);
        }
    }
}

参数的时间不能大于当前时间,大于当前时间会返回“刚刚”。

用法展示:

timestampFormat(1326170770); //2012年01月10日 12:46
timestampFormat(Date.parse("2016-10-11 15:26:10")/1000); //刚刚
timestampFormat(Date.parse("2016-10-11 15:10:10")/1000); //16分钟前
timestampFormat(Date.parse("2016-10-11 10:10:10")/1000); //今天10:10
timestampFormat(Date.parse("2016-10-10 10:10:10")/1000); //昨天10:10
timestampFormat(Date.parse("2016-02-10 10:10:10")/1000); //02月10日 10:10
timestampFormat(Date.parse("2012-10-10 10:10:10")/1000); //2012年10月10日 10:10

方法二

在新浪微博首页看到每条微博后边显示的时间并不是标准的年-月-日格式,而是经过换算的时间差,如:发表于5分钟前、发表于“2小时前”,比起标准的时间显示格式,貌似更加直观和人性化。要实现类似功能,用JS就可以,实现方法如下:

//JavaScript函数:
var minute = 1000 * 60;
var hour = minute * 60;
var day = hour * 24;
var halfamonth = day * 15;
var month = day * 30;
function getDateDiff(dateTimeStamp){
var now = new Date().getTime();
var diffValue = now - dateTimeStamp;
if(diffValue < 0){
 //若日期不符则弹出窗口告之
 //alert("结束日期不能小于开始日期!");
 }
var monthC =diffValue/month;
var weekC =diffValue/(7*day);
var dayC =diffValue/day;
var hourC =diffValue/hour;
var minC =diffValue/minute;
if(monthC>=1){
 result="发表于" + parseInt(monthC) + "个月前";
 }
 else if(weekC>=1){
 result="发表于" + parseInt(weekC) + "周前";
 }
 else if(dayC>=1){
 result="发表于"+ parseInt(dayC) +"天前";
 }
 else if(hourC>=1){
 result="发表于"+ parseInt(hourC) +"个小时前";
 }
 else if(minC>=1){
 result="发表于"+ parseInt(minC) +"分钟前";
 }else
 result="刚刚发表";
return result;
}

若你得到的时间格式不是时间戳,可以使用下面的JavaScript函数把字符串转换为时间戳, 本函数的功能相当于JS版的strtotime:

//js函数代码:字符串转换为时间戳
function getDateTimeStamp(dateStr){
 return Date.parse(dateStr.replace(/-/gi,"/"));
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/94853.html

相关文章

  • PHP时间转换今天昨天天几天

    摘要:经常在朋友圈,空间微博上看到动态的发布时间评论时间,都显示,昨天,前天,几天前,比起直接显示几月几日几分几秒要优雅的多。获取已经过了多久时间转换刚刚几分钟前几小时前今天昨天前天几天前时间戳今天最大时间刚刚分钟前小时前今天昨天前天天前原文 经常在朋友圈,QQ空间、微博上看到动态的发布时间、评论时间,都显示,昨天,前天,几天前,比起直接显示几月几日几分几秒要优雅的多。 于是自己的项目也想采...

    Jenny_Tong 评论0 收藏0
  • 如何通过供应链管理来居家做菜?

    摘要:袁鸣把价格数量一一进行记录,做了质检记录合格后办理了入库放入冰箱。但这回家宴与上次的家宴有什么不一样吗袁鸣首先把做每道菜的整个过程,用什么资源物料多长时间逻辑关系等等都分别录入到模块中。 此文已由作者王攀授权网易云社区发布。 欢迎访问网易云社区,了解更多网易技术产品运营经验。 引言: 目前我们团队在做的供应链协同决策系统(简称河洛,取河洛交汇,河图洛书之意),定位相当于一个计划、控制与...

    lncwwn 评论0 收藏0
  • Spring MVC官方文档翻译稿发布

    摘要:前后经过九个月,我翻译的官方版本中文文档可以发布第一个较为完整的版本了。这点原本是最重要的,但让位于符合中文习惯,是因为如果译本有机翻痕迹,给人的品质感和可信度就降低了更准确和更优雅的翻译风格。 showImg(/img/remote/1460000006773992); 前后经过九个月,我翻译的Spring MVC官方4.2.4版本中文文档可以发布第一个较为完整的版本了。译文上尽量做...

    高胜山 评论0 收藏0
  • NPM酷库:semver 语义化版本判断

    摘要:今天在此向大家推荐一种非常流行的版本号命名规则语义化版本。语义化版本约定修订版本号代表在和之前接口不变的前提下修正了。就是专门用于语义化版本号检查的库,其也是语义化版本标准的制定者。 NPM酷库,每天两分钟,了解一个流行NPM库。 软件的命运就是不断维护、更新、迭代,所以我们用版本号来区分一个软件的不同时期和形态,版本号的命名方式有各种各样,有的以小数表示(几点几),有的以日期表示,有...

    Carbs 评论0 收藏0
  • 时间处理小结

    摘要:相信,几乎每个前端项目都不可避免地要接触到时间处理,最最常见的就是时间格式化。中,内置对象封装了时间处理方法。 相信,几乎每个前端项目都不可避免地要接触到时间处理,最最常见的就是时间格式化。JS中,内置对象Date封装了时间处理方法。但说实话,这个对象方法太多,而且平时业务开发中也很少会直接用到这些方法,所以我总是对Date对象感觉到陌生!最近对时间处理作了下小结,用此文来记录一下。 ...

    Hydrogen 评论0 收藏0

发表评论

0条评论

DirtyMind

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<