diff --git a/Marlin/duration_t.h b/Marlin/duration_t.h
index 8e08791ff1f8df370701f89b4770700e0a269e8f..926fc1360dd082c8ee3d619329204887e78ca61f 100644
--- a/Marlin/duration_t.h
+++ b/Marlin/duration_t.h
@@ -146,11 +146,14 @@ struct duration_t {
* 11d 12:33
*/
void toDigital(char *buffer, bool with_days=false) const {
- int m = this->minute() % 60;
+ uint16_t h = uint16_t(this->hour()),
+ m = uint16_t(this->minute() % 60UL);
if (with_days)
- sprintf_P(buffer, PSTR("%id %02i:%02i"), this->day(), this->hour() % 24, m);
+ sprintf_P(buffer, PSTR("%ud %02u:%02u"), this->day(), h, m);
+ else if (h < 100)
+ sprintf_P(buffer, PSTR("%02u:%02u"), h % 24, m);
else
- sprintf_P(buffer, PSTR("%02i:%02i"), this->hour(), m);
+ sprintf_P(buffer, PSTR("%u:%02u"), h, m);
}
};