Sto provando a calcolare l'età di una persona usando Moment.js, ma sto trovando che il metodo fromNow altrimenti utile arrotonda gli anni. Ad esempio, se oggi è il 27/12/2012 e la data di nascita della persona è 02/26/1978, moment("02/26/1978", "MM/DD/YYYY").fromNow()
restituisce "35 anni fa". Come posso fare in modo che Moment.js ignori il numero di mesi e restituisca semplicemente il numero di anni (cioè 34) dalla data?Moment.js - come ottengo il numero di anni da una data, non arrotondato?
risposta
ho scoperto che avrebbe funzionato per ripristinare il mese di gennaio per entrambe le date (la data prevista e il presente):
> moment("02/26/1978", "MM/DD/YYYY").month(0).from(moment().month(0))
"34 years ago"
Sembra che ci sia un difference function che accetta gli intervalli di tempo da utilizzare come pure un'opzione per non arrotondare il risultato. Quindi, qualcosa di simile a
Math.floor(moment(new Date()).diff(moment("02/26/1978","MM/DD/YYYY"),'years',true)))
Non ho provato questo, e io non sono completamente familiarità con momento, ma sembra che questo dovrebbe ottenere ciò che si vuole (senza dover reimpostare il mese).
Sembra che non sia necessario ricevere il numero in virgola mobile dal momento e quindi arrotondarlo da soli, per questo scenario. Sembra che il momento arrotonda correttamente il risultato per il calcolo dell'anno utilizzando diff. – chris
Dalla documentazione, dalla 2.0.0, il numero # diff restituirà il numero arrotondato, quindi è necessario solo: '' 'age = moment(). Diff (birthDate, 'years')' ''. – SuperSkunk
@SuperSkunk: questa dovrebbe essere la risposta. – angularsen
Questo metodo funziona per me. Sta controllando se la persona ha avuto il proprio compleanno quest'anno e sottrae un anno altrimenti.
// date is the moment you're calculating the age of
var now = moment().unix();
var then = date.unix();
var diff = (now - then)/(60 * 60 * 24 * 365);
var years = Math.floor(diff);
Modifica: la prima versione non ha funzionato perfettamente. Quello aggiornare qualora
Questo ha funzionato per me se ho cambiato i giorni dell'anno a 365.25 per tenere conto degli anni bisestili – bschipp
usando momento è facile come questo:
var years = moment().diff('1981-01-01', 'years');
var days = moment().diff('1981-01-01', 'days');
speranza che questo aiuti.
Prova questo:
moment("02/26/1978", "MM/DD/YYYY").fromNow().split(" ")[0];
Spiegazione:
Riceviamo stringa qualcosa di simile: '23 giorni fa'. Dividilo in serie: ['23', 'giorni', 'fa'] e poi prendi il primo oggetto '23'.
Questo post viene contrassegnato automaticamente come di bassa qualità perché è solo codice. Ti dispiacerebbe espanderlo aggiungendo del testo per spiegare come risolve il problema? – Taifun
Se non volete utilizzare qualsiasi modulo per il calcolo dell'età
var age = Math.floor((new Date() - new Date(date_of_birth))/1000/60/60/24/365.25)
se non si desidera che i valori di frazione:
var years = moment().diff('1981-01-01', 'years',false);
alert(years);
se si desidera che i valori di frazione:
var years = moment().diff('1981-01-01', 'years',true);
alert(years);
Le unità possono essere [secondi, minuti, ore, giorni, settimane, mesi, anni]
Questa tecnica è coperta dalla risposta di @ ebeltran e la tua discussione sui valori frazionari non ha nulla a che fare con la domanda. Preferirei aggiungerlo come commento. – aknuds1
Questo metodo è semplice e potente.
Il valore è una data e "GG-MM-AAAA" è la maschera della data.
moment().diff(moment(value, "DD-MM-YYYY"), 'years');
Quando si desidera mostrare anni ei restanti giorni:
var m = moment(d.birthday.date, "DD.MM.YYYY");
var years = moment().diff(m, 'years', false);
var days = moment().diff(m.add(years, 'years'), 'days', false);
alert(years + ' years, ' + days + ' days');
In moment.js v2.3.1 c'è un metodo .fromNow(), che può anche essere utile. –
Spot on, grazie amico. – maverickosama92