How to set time with date in momentjs

137,975

Solution 1

Moment.js does not provide a way to set the time of an existing moment through a string. Why not just concatenate the two:

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>

Alternatively, you can use two Moment objects and use the getters and setters. Although a far more verbose option, it could be useful if you can't use concatenation:

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>

Solution 2

Since this pops up in google results, moment now has a set(unit, value) function and you can achieve this by:

const hours = 15;
const minutes = 32;
var date = moment("1946-05-21").set("hour", hours).set("minute", minutes);

or as a combined function

var date = moment("1946-05-21").set({"hour": 15, "minute": 32});

Note: the set function requires the value to be Integer type

Solution 3

for today's date with a different time:

moment(12, "HH")

Solution 4

Just incase anyone is wondering how to set the time on a Date Object, here's how I did it:

const dateObj = new Date();

const dateStr = dateObj.toISOString().split('T').shift();
const timeStr = '03:45';

const timeAndDate = moment(dateStr + ' ' + timeStr).toDate();

Solution 5

var timeAndDate = moment(date).add(moment.duration(time))

When you have separated string for date and time you can parse first as date and second as duration and just add them. This should create moment with proper date and time

Share:
137,975
Mo.
Author by

Mo.

Every nice creation start from imagination followed by dedication. Contacts 👇 Portfolio LinkedIn

Updated on July 05, 2022

Comments

  • Mo.
    Mo. almost 2 years

    Does momentjs provide any option to set time with particular time ?

    var date = "2017-03-13";
    var time = "18:00";
    
    var timeAndDate = moment(date).startOf(time);
    
    console.log(timeAndDate);
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>

    enter image description here

  • Pedram
    Pedram over 4 years
    Please edit your answer and add some context by explaining how your answer solves the problem, instead of posting code-only answer. From Review
  • GrayedFox
    GrayedFox over 3 years
    Does not give the accurate results.
  • Eggon
    Eggon almost 3 years
    Concatenating is not a viable option if working with different time zones.
  • Luke H
    Luke H about 2 years
    Really you should not be altering datetimes using string operations. That's what a library like moment is for. Better to use moment(dateObj).hours(3).minutes(45)