vue+原生js仿钉钉做聊天时间处理

这篇博客详细介绍了JavaScript中实现聊天记录时间显示逻辑的方法,包括一分钟内显示'刚刚',一小时内显示分钟数,当天显示具体时间,前一天显示'昨天'等。通过多个辅助函数如isYestday和isYear来判断日期,并使用formatTime进行时间格式化。提供的代码示例展示了如何处理和格式化不同时间范围内的日期。
摘要由CSDN通过智能技术生成

需求

聊天记录 列表显示时间+聊天框显示时间
	一分钟:显示刚刚
	一小时内:显示多少分钟之前
	今日:显示小时+分钟
	昨日:显示 昨天+小时+分钟
	今年:显示:月份+日期
	不属于今年:显示:年月日+小时+分钟

代码逻辑

以下函数都写在comment.js文件下

  1. 主函数

    解释:
    	聊天的时间逻辑
    		传递 timeValue的格式为 2021/03/24 13:56:00
    	如果数据是'2015-08-18 15:13:15';参考下述进行转换
    		// var str ='2015-08-18 15:13:15';
    		// str = str.replace(/-/g,"/");
    		// var date = new Date(str );
    
    	function timeChange (timeValue) {
    	  timeValue = new Date(timeValue).getTime()
    	  var timeNew = new Date().getTime() // 当前时间
    	  // console.log('传入的时间', timeValue, timeNew)
    	  var timeDiffer = timeNew - timeValue // 与当前时间误差
    	  // console.log('时间差', timeDiffer)
    	  var returnTime = ''
    	  if (timeDiffer <= 60000) { // 一分钟内
    	    returnTime = '刚刚'
    	  } else if (timeDiffer > 60000 && timeDiffer < 3600000) { // 1小时内
    	    returnTime = Math.floor(timeDiffer / 60000) + '分钟前'
    	  } else if (timeDiffer >= 3600000 && timeDiffer < 86400000 && isYestday(timeValue) === false) { // 今日
    	    returnTime = formatTime(timeValue).substr(11, 5)
    	  } else if (timeDiffer > 3600000 && isYestday(timeValue) === true) { // 昨天
    	    returnTime = '昨天' + formatTime(timeValue).substr(11, 5)
    	  } else if (timeDiffer > 86400000 && isYestday(timeValue) === false && isYear(timeValue) === true) { // 今年
    	    returnTime = formatTime(timeValue).substr(5, 11)
    	  } else if (timeDiffer > 86400000 && isYestday(timeValue) === false && isYear(timeValue) === false) { // 不属于今年
    	    returnTime = formatTime(timeValue).substr(0, 16)
    	  }
    	  return returnTime
    	}
    
  2. 次函数

    	函数isYestday:是否为昨天 返回 true or false
    	这里根据日期进行判断,而非时间戳数值,因为数值计算涉及到大数有一定的误差
    
     	function isYestday (timeValue) { // 是否为昨天
    	  const date = new Date(timeValue)
    	  const today = new Date()
    	  if (date.getFullYear() === today.getFullYear() && date.getMonth() === today.getMonth()) {
    	    if (date.getDate() - today.getDate() === 1) {
    	      return true
    	    } else {
    	      return false
    	    }
    	  } else {
    	    return false
    	  }
    	}
    
    函数isYear : 是否为今年
    
    	function isYear (timeValue) { // 是否为今年
    	  const dateyear = new Date(timeValue).getFullYear()
    	  const toyear = new Date().getFullYear()
    	  // console.log(dateyear, toyear)
    	  if (dateyear === toyear) {
    	    return true
    	  } else {
    	    return false
    	  }
    	}
    
    函数:formatTime  格式化时间 返回时间字符串如   2018-07-06 11:11:37
    
    	function formatTime (date) {
         var t = getTimeArray(date)
       	  return [t[0], t[1], t[2]].map(formatNumber).join('-') + ' ' + [t[3], t[4], t[5]].map(formatNumber).join(':')
       	}
       	
       function getTimeArray (date) {
         date = new Date(date)
         var year = date.getFullYear()
         var month = date.getMonth() + 1
         var day = date.getDate()
         var hour = date.getHours()
         var minute = date.getMinutes()
         var second = date.getSeconds()
         return [year, month, day, hour, minute, second].map(formatNumber)
       }
       
       // 转化日期 如2018-7-6 -->(2018-07-06)
       function formatNumber (n) {
         n = n.toString()
         return n[1] ? n : '0' + n
       }
    
  3. 导出

    export {
     timeChange
    }
    

验证

```js
	import { timeChange } from './assets/js/common'
	// 当前时间:2021/03/24 18:13
	export default {
	  name: 'APP',
	  created () {
	    // console.log('时间处理')
	    console.log(timeChange('2021/03/24 14:52:00'))
	    console.log(timeChange('2021/03/23 14:52:00'))
	    console.log(timeChange('2020/03/24 14:52:00'))
	    console.log(timeChange('2021/03/24 14:51:00'))
	    console.log(timeChange('2021/03/24'))
	    console.log(timeChange('2021/03/23'))
	  }
	}
```

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现在Spring Boot和Vue中使用WebSocket来实现实时聊天的过程如下: 1. 后端使用Spring Boot,首先需要在pom.xml文件中添加依赖项以支持WebSocket和Spring Boot的WebSocket集成。例如: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> ``` 2. 创建一个WebSocket配置类,用于配置WebSocket处理程序和端点。例如: ```java @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(new ChatHandler(), "/chat").setAllowedOrigins("*"); } } ``` 3. 创建WebSocket处理程序,用于处理WebSocket连接、消息发送和接收。例如: ```java @Component public class ChatHandler extends TextWebSocketHandler { private static final List<WebSocketSession> sessions = new CopyOnWriteArrayList<>(); @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { sessions.add(session); } @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { String payload = message.getPayload(); for (WebSocketSession currentSession : sessions) { currentSession.sendMessage(new TextMessage(payload)); } } @Override public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { sessions.remove(session); } } ``` 4. 在Vue中使用`vue-native-websocket`或`vue-socket.io`等库来创建WebSocket连接并处理消息。例如: ```javascript import VueNativeSock from 'vue-native-websocket' Vue.use(VueNativeSock, 'ws://localhost:8080/chat', { format: 'json', reconnection: true, store: VuexStore // 如果需要将消息存储到Vuex中,可以提供一个Vuex store }) ``` 5. 在Vue组件中使用WebSocket连接,发送和接收消息。例如: ```javascript this.$socket.send('Hello') // 发送消息 this.$socket.onMessage((message) => { console.log(message) // 收到消息 }) ``` 通过上述步骤,就可以在Spring Boot和Vue中使用WebSocket来实现实时聊天功能。当用户在Vue组件中发送消息时,消息将通过WebSocket连接发送到后端的Spring Boot应用程序,然后由WebSocket处理程序将消息广播给所有连接的客户端。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值