Moment.js no proporciona una forma de establecer la hora de un momento existente a través de una cadena. ¿Por qué no simplemente concatenar los dos?
var date = "2017-03-13"; var time = "18:00"; var timeAndDate = moment(date + ' ' + time); console.log(timeAndDate); <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>Alternativamente, puede usar dos objetos Moment y usar los getters y setters. Aunque es una opción mucho más detallada, podría ser útil si no puede usar la concatenación:
let dateStr = '2017-03-13', timeStr = '18:00', date = moment(dateStr), time = moment(timeStr, 'HH:mm'); date.set({ hour: time.get('hour'), minute: time.get('minute'), second: time.get('second') }); console.log(date); <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>Dado que esto aparece en los resultados de Google, el momento ahora tiene una función de set(unit, value) y puede lograr esto de la siguiente manera:
const hours = 15; const minutes = 32; var date = moment("1946-05-21").set("hour", hours).set("minute", minutes);o como una función combinada
var date = moment("1946-05-21").set({"hour": 15, "minute": 32}); Nota: la función set requiere que el valor sea de tipo Integer
En caso de que alguien se pregunte cómo configurar la hora en un objeto de fecha , así es como lo hice:
const dateObj = new Date(); const dateStr = dateObj.toISOString().split('T').shift(); const timeStr = '03:45'; const timeAndDate = moment(dateStr + ' ' + timeStr).toDate();