Это действительно должно быть разделено на две отдельные проблемы в вашем приложении.
- Внутренние операции управления временем - Как ваша система использует время? Вы просто добавляете / вычитаете? Какую самую короткую единицу времени вы будете оперировать? Это
1 second
или у вас будет sub-second
точность? - Визуальный слой - Как отображается время для пользователя? Вы можете использовать ответ @ Jeto в качестве руководства. Это место, где вы берете внутреннюю единицу времени и конвертируете ее в визуальное значение, которое фактически видит пользователь.
Я твердо верю, что это разделение интересов сделает вашу жизнь намного проще в будущем. Вы сможете легко выполнить юнит-тестирование каждого отдельного компонента и слоя.
Возможно, вы вообще не хотите касаться DateTime , потому что он начнет применять «календарь». логика для ваших номеров. В математике у вас может внезапно оказаться високосный год, что, вероятно, не то, что вам нужно.
DateInterval лучше подходит здесь, поскольку, как следует из названия, он предназначен для работы с интервалами(что вы хотите), а не физические календарные даты. Однако я боюсь, что вы все равно очень быстро столкнетесь с непреднамеренными крайними случаями.
Сохранение вашей продолжительности в строковом формате - ужасная идея, потому что вам придется анализировать ее каждый рази по-прежнему приводить его к меткам DateInterval или unix, чрезмерно усложняя это.
В моей голове остается только один соперник - integer . Отметка времени Unix является наиболее очевидным кандидатом здесь, но вам, возможно, придется использовать microtime или что-то подобное, если вам нужны затраты менее секунды.
Как только вы определились со своим внутренним форматом данных, вы сможете легко создать анализатор визуального представления. Вы знаете, «разделите секунды на 60, чтобы получить минуты», «разделите на 60, чтобы получить часы», «на 24, чтобы получить дни» и т. Д. И т. Д., Добавьте к каждому результату нули, чтобы сделать его двузначным, и все готово!
Удачи:)