J'ai quatre champs dans un formulaire, certains contenant une date initiale et la date de fin (jj/mm/aaaa) et d'autres contenant l'heure de début et l'heure de fin (hh: ss).
La valeur de ces champs que j'utilise pour obtenir la date et l'heure avec moment.js, comme ceci:
initialdate = moment( $('input#start_date').val(), 'DD/MM/YYYY' );
start_time = moment( $('input#start_time').val(), 'HH:mm');
enddate = moment( $('input#enddate').val(), 'DD/MM/YYYY' );
end_time = moment( $('input#end_time').val(), 'HH:mm');
Ce que je souhaite, c’est d’obtenir la différence en secondes entre les deux dates, en concaténant la date et l’heure de début et la date et l’heure de fin. J'ai essayé de le faire, mais en vain:
start = initialdate + start_time;
end = enddate + end_time;
tracker = moment.duration( end.diff(start) ).asSeconds();
L'échec est d'essayer de concaténer les valeurs, testez avec quelque chose comme ça
let initialdate = '2016-10-01';
let start_time = '19:04:10';
let enddate = '2016-10-01';
let end_time = '19:04:20';
let datetimeA = moment(initialdate + " " + start_time);
let datetimeB = moment(enddate + " " + end_time);
console.log(datetimeA.format());
console.log(datetimeB.format());
let datetimeC = datetimeB.diff(datetimeA, 'seconds');
console.log(datetimeC);
Concaténer les chaînes de date et d’heure et les analyser comme une seule,.
var date = '23/02/2017';
var time = '15:42';
var dateTime = moment(date + ' ' + time, 'DD/MM/YYYY HH:mm');
console.log(dateTime.format('YYYY-MM-DD HH:mm'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.js"></script>
Une solution beaucoup plus propre OMI consiste à utiliser les getters et les setters du moment hour
et minute
.
let a = moment()
let b = moment().add(3, 'hour').add(37, 'minute') //b is the time portion
a.hour(b.hour()).minute(b.minute())
[2019] La solution la plus élégante est:
/* "date" and "time" are moment() objects */
date = date.set({
hour: time.get('hour'),
minute: time.get('minute'),
second: 0,
millisecond: 0,
});