如何在消息框中仅显示日期在vuejs中的前一个日期唯一的日期

p4tfgftt  于 2023-05-07  发布在  Vue.js
关注(0)|答案(2)|浏览(223)

我想在消息聊天示例中显示唯一日期。

data() {
 return {
  message: [
    {id: 1,message: 'hi', created_at: '2023-02-16 00:44:41'},
    {id: 2,message: 'how are you?', created_at: '2023-02-16 01:00:00'},
    {id: 3,message: 'hello', created_at: '2023-03-01 12:00:00'},
    {id: 5,message: 'hi', created_at: '2023-03-01 15:56:00'},
  ]
 }}

消息中的结果日期示例

jm81lzqq

jm81lzqq1#

您应该设置日期属性的格式。您可以创建一个函数:

formattedDate(date) {
  const dateObj = new Date(date)
  return dateObj.toLocaleDateString('en-US')
}

然后在你的模板中调用日期属性时,你可以把它作为函数属性发送。例如:

<ul>
<li v-for="message in messages" :key="message.id">
{{ formattedDate(message.created_at) }}
</li>
</ul>
doinxwow

doinxwow2#

你必须为你的消息数组创建一个额外的 prop ,例如“show_date”。此属性将决定是否显示日期。

可以通过计算值进行:

computed: {
  messages() {
    return this.message.map((m, index) => {
      // Get previous message from source array
      const prevMessage = this.message[index - 1];
      if (prevMessage) { // If previous message exists let's check the dates
        return {...m, show_date: !this.isSameDate(m.created_at, prevMessage.created_at) };
      } else { // otherwise we will show the date
        return {...m, show_date: true };
      }
    });
  },
},

这里是检查日期是否是同一天的函数,但您可以使用momentjs或dayjs代替

methods: {
  isSameDate(first, second) {
    const firstDate = new Date(first);
    const secondDate = new Date(second);
    return firstDate.getFullYear() === secondDate.getFullYear() && 
      firstDate.getMonth() === secondDate.getMonth() && 
      firstDate.getDate() === secondDate.getDate();
  },
},

最后,您必须仅在'show_date'为true时才能按计算的prop和显示日期呈现消息。

<div v-for="m in messages" :key="m.id">
  <div v-if="m.show_date">
    {{ m.created_at }}
  </div>
  <div>
    {{ m.message }}
  </div>
</div>

你可以在这里找到完整的代码:https://codepen.io/AlekseiKrivo/pen/xxyXpmY

相关问题