Trovare l'ultimo giorno del mese corrente

var oggi = new Date();
//new Date(anno, mese, 1) da come risultato il primo giorno del mese
//new Date(anno, mese, 0) fa tornare indietro al giorno prima del giorno 1
//quindi all'ultimo giorno DEL MESE PRECEDENTE
//per avere quindi l'ultimo giorno DEL MESE CORRENTE
//devo tornare indietro di un giorno ma partendo dal mese successivo
var ultimoGiorno = new Date(oggi.getFullYear(), (parseInt(oggi.getMonth(), 10) + 1), 0).getDate();

Trovare la data di ieri / domani

var ieri = new Date((new Date()).valueOf() - 1000 * 60 * 60 * 24);
var domani = new Date((new Date()).valueOf() + 1000 * 60 * 60 * 24);

Trovare la differenza in giorni tra due date

var differenzaGiorni = Math.ceil(Math.abs(new Date() - new Date('1982-05-19')) / (1000 * 60 * 60 * 24));

Trovare la differenza in mesi tra due date

var oggi = new Date();
var elena = new Date('1982-05-19');
var differenzaMesi = Math.max(0, (oggi.getFullYear() - elena.getFullYear()) * 12 - elena.getMonth() + oggi.getMonth());

Trovare se una data è compresa tra altre due date

var oggi = new Date();
var primaData = new Date('2020-03-01');
var secondaData = new Date('2020-08-31');
var compresa = oggi.getTime() >= primaData.getTime() && oggi.getTime() <= secondaData.getTime();

Trovare se una certa data è uguale a oggi

var data = new Date('2025-05-15');
var dataUgualeOggi = data.toISOString().slice(0, 10) === new Date().toISOString().slice(0, 10);

Trovare se un certo anno è bisestile

var annoBisestile2024 = new Date(2024, 1, 29).getDate() === 29; //true

Countdown

<p>giorni: <span id="giorni"></span> ore: <span id="ore"></span>  minuti: <span id="minuti"></span> secondi: <span id="secondi"></span></p>
body, p {
  margin: 0;
}
p {
  height: 100vh;
  width: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 3.5vw;
  background: -webkit-linear-gradient(to right, #E684AE, #79CBCA, #77A1D3);
  background: linear-gradient(to right, #E684AE, #79CBCA, #77A1D3);

}
span {
  margin: 0.5rem;
  font-weight: bold;
}
let natale2025 = new Date(2025, 11, 25).getTime();
let spanGG = document.getElementById("giorni");
let spanHH = document.getElementById("ore");
let spanMM = document.getElementById("minuti");
let spanSS = document.getElementById("secondi");

let timer = setInterval(function () {

  let msOggi = new Date().getTime();

  let differenza = natale2025 - msOggi;

  let gg = Math.floor(differenza / (1000 * 60 * 60 * 24));
  let hh = Math.floor((differenza % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
  let mm = Math.floor((differenza % (1000 * 60 * 60)) / (1000 * 60));
  let ss = Math.floor((differenza % (1000 * 60)) / 1000);


  spanGG.innerText = gg;
  spanHH.innerText = hh;
  spanMM.innerText = mm;
  spanSS.innerText = ss;

}, 1000);

Orologio

<p>ore: <span id="hh"></span> minuti: <span id="mm"></span> secondi: <span id="ss"></span></p>
    
  
body, p {
  margin: 0;
}
p {
  height: 100vh;
  width: 100%;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 3.5vw;
  background: -webkit-linear-gradient(to right, #92FE9D, #00C9FF);
  background: linear-gradient(to right, #92FE9D, #00C9FF);


}
span {
  margin: 0.5rem;
  font-weight: bold;
}
let hh = document.getElementById('hh');
let mm = document.getElementById('mm');
let ss = document.getElementById('ss');

setInterval(function() {
  let now = new Date();
  hh.innerText = now.getHours();
  mm.innerText = now.getMinutes();
  ss.innerText = now.getSeconds();
}, 1000);

Trovare l'età a partire dalla data di nascita

<p>Se sei nato il 16 settembre 1993 la tua età è di <span id="anni"></span> anni, <span id="mesi"></span> mesi, <span id="giorni"></span> giorni</p>
body, p {
  margin: 0;
}
p {
  height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 3vw;
  background-image: linear-gradient(to top, #f5efef 0%, #feada6 100%);
}

span {
  margin: 0.5rem;
  font-weight: bold;
}
let oggi = new Date();
let dataNascita = new Date('1993-09-16');

let anniEta = oggi.getFullYear() - dataNascita.getFullYear();

let mesiEta;
if (oggi.getMonth() >= dataNascita.getMonth()) {
  mesiEta = oggi.getMonth() - dataNascita.getMonth();
} else {
  anniEta--;
  mesiEta = 12 + oggi.getMonth() - dataNascita.getMonth();
}

let giorniEta;
if (oggi.getDate() >= dataNascita.getDate()) {
  giorniEta = oggi.getDate() - dataNascita.getDate();
} else {
  mesiEta--;
  giorniEta = 31 + oggi.getDate() - dataNascita.getDate();

  if (mesiEta < 0) {
    mesiEta = 11;
    anniEta--;
  }
}

document.getElementById('anni').innerText = anniEta;
document.getElementById('mesi').innerText = mesiEta;
document.getElementById('giorni').innerText = giorniEta;

Calendario

<table id="table">
  <caption>
    <p><button id="prev-month">←</button> <span id="current-month"></span> <button id="next-month">→</button>
    </p>
    <p><button id="prev-year">←</button> <span id="current-year"></span> <button id="next-year">→</button></p>
  </caption>
  <thead>
    <th>Dom</th>
    <th>Lun</th>
    <th>Mar</th>
    <th>Mer</th>
    <th>Gio</th>
    <th>Ven</th>
    <th>Sab</th>
  </thead>
  <tbody id="tbody"></tbody>
</table>
body, p {
  margin: 0;
}
body {
  height: 100vh;
  display: flex;
  justify-content: center;
  margin-top: 20px;
  background-image: linear-gradient(-225deg, #5D9FFF 0%, #B8DCFF 48%, #6BBBFF 100%);
}

table {
  background-color: rgba(255, 255, 255, 0.2);
}
caption p {
  display: flex;
  justify-content: space-between;
  padding: 0.25rem;
  background-color: #6BBBFF;
}
td, th {
  padding: 0.5rem;
  text-align: center;
}
.oggi {
  background-color: #5D9FFF;
}
let table = document.getElementById('table');
let prevMonthArrow = document.getElementById('prev-month');
let nextMonthArrow = document.getElementById('next-month');
let prevYearArrow = document.getElementById('prev-year');
let nextYearArrow = document.getElementById('next-year');
let currentMonthName = document.getElementById('current-month');
let currentYearName = document.getElementById('current-year');
let tbody = document.getElementById('tbody');
let oggi = new Date();

function updateLabels() {
  currentMonthName.innerText = oggi.toLocaleString('default', { month: 'long' });
  currentYearName.innerText = oggi.getFullYear();
}

//http://www.frontcoded.com/splitting-javascript-array-into-chunks.html
function dividiArray(arr) {
  var sottoArray = [],
      i;
  for (i = 0; i < arr.length; i += 7) {
    sottoArray.push(arr.slice(i, i + 7));
  }
  return sottoArray;
}

function resetTable() {
  while (tbody.firstChild) {
    tbody.removeChild(tbody.lastChild);
  }
}

function buildCalendar() {
  let lastDayOfMonth = new Date(oggi.getFullYear(), oggi.getMonth() + 1, 0).getDate();
  let startDayOfTheWeek = new Date(oggi.getFullYear(), oggi.getMonth(), 1).getDay();
  let endDayOfTheWeek = new Date(oggi.getFullYear(), oggi.getMonth(), lastDayOfMonth).getDay();
  let arrayOfDays = [];

  for (let i = 1; i <= lastDayOfMonth; i++) {
    arrayOfDays.push(i);
  }
  //aggiungo giorni finti prima del primo giorno
  for (let i = 0; i < startDayOfTheWeek; i++) {
    arrayOfDays.unshift(0);
  }
  //aggiungo giorni finti dopo l'ultimo giorno
  for (let i = endDayOfTheWeek; i < 6; i++) {
    arrayOfDays.push(0);
  }

  let arrayOfWeeks = dividiArray(arrayOfDays);
  arrayOfWeeks.forEach((week, index) => {
    let tr = document.createElement('tr');
    tr.classList.add('week-' + (index + 1));
    week.forEach((el, i) => {
      let td = document.createElement('td');
      if (el == 0) {
        td.classList.add('fake-day');
      }
      else {
        td.classList.add('day-' + el);
        if (oggi.getFullYear() == new Date().getFullYear() && oggi.getMonth() == new Date().getMonth() && el == new Date().getDate()) {
          td.classList.add('oggi');
        }
        td.innerText = el;
      }

      tr.appendChild(td);
    });


    tbody.appendChild(tr);

  });
}

updateLabels();
buildCalendar();

table.addEventListener('click', function (event) {
  switch (event.target.id) {
    case "prev-month":
      oggi.setMonth(oggi.getMonth() - 1);
      updateLabels();
      resetTable();
      buildCalendar();
      break;
    case "next-month":
      oggi.setMonth(oggi.getMonth() + 1);
      updateLabels();
      resetTable();
      buildCalendar();
      break;
    case "prev-year":
      oggi.setFullYear(oggi.getFullYear() - 1);
      updateLabels();
      resetTable();
      buildCalendar();
      break;
    case "next-year":
      oggi.setFullYear(oggi.getFullYear() + 1);
      updateLabels();
      resetTable();
      buildCalendar();
      break;

    default:
      break;
  }
})