Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

126
Visualizações
vuejs style binding between two dates

I want to give text color after two date with vue js, but I couldn't find a solution. Example: I want to make the StartDate Today and the End Date 05.10.2021 red accordingly. but I want to do this condition with v-bind is it possible?

<tr v-for="(item, i) in attributes" :class="today ? 'greater' : 'today'">
<td>{{ today ,item.due_date | remainingday}}</td>
</tr>

export default {
  data() {
    return {
      type: 'sales_invoices',
      attributes: [],
      start: new Date().toLocaleDateString,
    }
  },
  async created() {
    const res = await this.callApi('get', this.type)
    if (res.status === 200) {
      this.attributes = res.data.data
    }
  },
  computed: {
    today(){
      const startY = new Date(this.start.split(".").reverse().join("."))
      const end = new Date('05.10.2021'.split(".").reverse().join("."))
      const difDays = Math.floor((startY.getTime() - end.getTime()) / (1000 * 3600 * 24))
      return difDays > 0
    },
  },

app.js

Vue.filter('remainingday', function (startDate, endDate) {
  const start = new Date(startDate.split(".").reverse().join("."))
  const end = new Date(endDate.split(".").reverse().join("."))
  if(start.toDateString() === end.toDateString()) {
    return 'TODAY'
  } 
  const difDays = Math.floor((start.getTime() - end.getTime()) / (1000 * 3600 * 24))
  return difDays > 0 
    ? `PAYMENT DELAYED FOR ${difDays} DAYS `
    : `${difDays * -1} DAYS LEFT`
});
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

You can try with class binding and method:

new Vue({
  el: '#demo',
  data(){
    return {
      start: new Date(),
      attributes: [{due_date: '30.10.2021'}, {due_date: '07.10.2021'}, {due_date: '03.10.2021'}]
    }
  },
  methods: {
    remainingday (startDate, endDate) {
      const dates = startDate.toLocaleDateString() + ' ' + endDate
      const start = new Date(startDate)
      const end = new Date(endDate.split(".").reverse().join("-"))
      if(start.toDateString() === end.toDateString()) return {dat: `${dates} - TODAY`, cl: 'today'}
      const difDays = Math.ceil((start.getTime() - end.getTime()) / (1000 * 3600 * 24))
      return difDays > 0 
        ? {dat: `${dates} - PAYMENT DELAYED FOR ${difDays} DAYS`, cl: 'greater'}
        : {dat: `${dates} - ${difDays * -1} DAYS LEFT`, cl: ''}
    }
  }
})

Vue.config.productionTip = false
Vue.config.devtools = false
.today {
  color: blue; 
}
.greater {
  color: red; 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="demo">
<table>
    <tr v-for="(item, i) in attributes" :key="i">
      <td :class="remainingday(start, item.due_date).cl">{{ remainingday(start, item.due_date).dat }}</td>
    </tr>
  </table>
</div>

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda