'Moment.js startOf is returning end of day

I am passing in the following date through query string: 2020-09-23

I am trying to figure out why the below code with the doesn't work comment above it is not working.

// If figure here I should only have to convert to a moment once
const momentDate = moment.utc(req.query.dateTime);

// Doesn't work
const startOfDay = momentDate.startOf('day');
const endOfDay = momentDate.endOf('day');

This is what I am getting:
console.log(startOfDay) = Moment<2020-09-23T23:59:59Z>
console.log(endOfDay) = Moment<2020-09-23T23:59:59Z>

// Works (when I directly pass in the query string param)
const startOfDay = moment.utc(req.query.dateTime).startOf('day');
const endOfDay = moment.utc(req.query.dateTime).endOf('day');

console.log(startOfDay) = Moment<2020-09-23T00:00:00Z>
console.log(endOfDay) = Moment<2020-09-23T23:59:59Z>



Solution 1:[1]

You are doing on the same object momentDate, so same reference, so the safer way is to work on the copy of that object by cloning that momentDate with clone() method

const momentDate = moment.utc(new Date())

const startOfDay = momentDate.clone().startOf("day")
const endOfDay = momentDate.clone().endOf("day")

console.log(startOfDay)
console.log(endOfDay)

Solution 2:[2]

If you have a timezone problem, try this approach.

let myDate = new Date();

const timezoneOffset = moment(myDate).utcOffset();

moment(myDate).utc().add(timezoneOffset, 'minutes').startOf('day').format();
moment(myDate).utc().add(timezoneOffset, 'minutes').endOf('day').format();

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 hgb123
Solution 2 Bank5z0rSqt