做一个微信消息的日期展示

Posted 五花肉三七分

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了做一个微信消息的日期展示相关的知识,希望对你有一定的参考价值。

目标:观察微信收发消息的时间展示,完成一个日期转化函数


一:分析问题

首先观察微信消息的时间展示后提取有用信息。

  1.  如果是当天收发的信息,日期显示的是小时+分钟。手机端的话又分为了凌晨,上午,下午,晚上。
  2. 如果是昨天收发的信息,显示的时间为昨天+小时+分钟。
  3. 如果是一周以内,两天之前,显示的时间为星期几+小时+分钟。
  4. 如果是一周以后,可以显示年月日+小时+分钟。还可以细分为当前年份时只显示月日+小时+分钟,我这里没有细分。

二:解题思路

  1. 得到收发消息的时间。
  2. 格式化收发消息的时间。
  3. 过一段时间后用当前时间减去之前收发消息的时间。
  4. 判断差值,根据差值显示不同的日期格式。

三:编写代码

//一天内的时间,显示为凌晨xx:xx;上午xx:xx;晚上xx:xx
//超过一天小于两天的,显示为昨天:凌晨xx:xx;上午xx:xx;晚上xx:xx
//超过两天小于一周的,显示为星期几:凌晨xx:xx...
//超过一周的,显示几月几日:凌晨xx:xx;。。。。
const ONE_DAY =  24*60*60*1000;
const LOCAL_TIME = new Date();
const LOCAL_DATE = LOCAL_TIME.getDate();
const LOCAL_ZERO_TODAY = (LOCAL_TIME.getHours()*60*60 + LOCAL_TIME.getMinutes()*60 + LOCAL_TIME.getSeconds())*1000;//距离今天零点
const ONE_WEEK_ARRAY = ['','星期一','星期二','星期三','星期四','星期五','星期六','星期日'];
function getFormatCommentTimeInfo(time)
    let createTime = new Date(time);
    let commentTimeInfo = 
        year : createTime.getFullYear(),
        month: createTime.getMonth()+1,
        day: createTime.getDay(),
        hour: createTime.getHours(),
        minute: createTime.getMinutes()<10 ? '0' +createTime.getMinutes() : createTime.getMinutes(),
        date: createTime.getDate()
    
    return commentTimeInfo

function formatCommentTime(time)
    let diffTime = LOCAL_TIME - time;//与现在时间的差异
    const year,month,day,hour,minute,date = getFormatCommentTimeInfo(time);
    if(diffTime <= ONE_DAY+ LOCAL_ZERO_TODAY)
        if(date === LOCAL_DATE )
            if(hour < 6)
                return `凌晨$hour:$minute`
            else if( hour >= 6 && hour < 12)
                return `上午$hour:$minute`
            else if(hour >= 12 && 18 >hour)
                return `下午$hour:$minute`
            else
                return `晚上$hour:$minute`
               
        else 
            if(hour < 6)
                return `昨天 凌晨$hour:$minute`
            else if( hour > 6 && hour < 12)
                return `昨天 上午$hour:$minute`
            else if(hour > 12 && 18 >hour)
                return `昨天 下午$hour:$minute`
            else
                return `昨天 晚上$hour:$minute`
            
        
    else if (diffTime <= (ONE_DAY * 7 + LOCAL_ZERO_TODAY)) 
        return `$ONE_WEEK_ARRAY[day] $hour:$minute`;
     else 
        return `$year年$month月$date日 $hour:$minute`;
    

console.log(formatCommentTime(1549530579463))

四:测试结果

多次测试,效果良好。

 五:优化代码

  1. 修改命名规范。
  2. 抽离相同功能代码。

以上是关于做一个微信消息的日期展示的主要内容,如果未能解决你的问题,请参考以下文章

sas将几分几秒转化为秒

有两个日期字段(indate,outdate)。显示如2012-05-30 17:55:29。outdate与indate之差小于24小时。求SQL

IOS 日期的简洁格式展示

IOS 日期的简洁格式展示

PHP中比较两个时间的大小与日期的差值

如何计算两个日期时间之间的小时,分​​钟? [复制]