date and time: rounding of datetime objects to a given granularity

How do you round up the date and time objects to any granularity (for example, "Hour", "Minute", etc.)?

What I am looking for is a function that would do the following:

DateRound[DateObject[{2018, 7, 7, 10, 55, 42.}], "Hour"]-> DateObject[{2018, 7, 7, 11, 0, 0.}]

DateRound[DateObject[{2018, 7, 7, 10, 55, 42.}], "Minute"]-> DateObject[{2018, 7, 7, 10, 56, 0.}]

That is, round the given DateObject to the given granularity: the nearest minute, the nearest hour, the day, the month, etc.

may l Floor dates using Current date:

Current date[DateObject[{2018, 7, 7, 10, 55, 42.}], "Hour"]-> DateObject[{2018, 7, 7, 10}]

or using Value date:

Value date[DateObject[{2018, 7, 7, 10, 55, 42.}], {"Year", "Month", "Day", "Time"}]-> {2018, 7, 7, 10}

But as you can see, this does not give me the rounded granularity (11), but the floor granularity (10).

It is about DayRound, which is approximately the functionality I'm looking for, but does not support time operations.