Посоветуйте более оптимальный способ получения разницы во времени между днями
Написал небольшой скриптик, считающий разницу во времени между текущим моментов и будущим днем недели в секундах, т.к не нашел соответствующей команды для подобного результата. Может я плохо искал, но почему-то мне кажется, что решение моей проблему уже должно быть, может быть даже более оптимальное. Если такое есть, буду благодарен, если поделитесь. В данном скрипте я получаю кол-во секунд до какого-то определенного дня недели, чтобы потом можно было их передать таймеру. Конкретной даты нет, есть только Now и дни недели
private DateTime currentDate;
private DateTime futureDate;
private void OnEnable()
{
currentDate = futureDate = DateTime.Now;
StartCoroutine(CheckTime());
}
private IEnumerator CheckTime()
{
while (futureDate.AddDays(1d).DayOfWeek != DayOfWeek.Monday)
{
futureDate = futureDate.AddDays(1d);
yield return null;
}
while (futureDate.AddHours(1d).DayOfWeek != DayOfWeek.Monday)
{
futureDate = futureDate.AddHours(1d);
yield return null;
}
while (futureDate.AddMinutes(1d).DayOfWeek != DayOfWeek.Monday)
{
futureDate = futureDate.AddMinutes(1d);
yield return null;
}
while (futureDate.AddSeconds(1d).DayOfWeek != DayOfWeek.Monday)
{
futureDate = futureDate.AddSeconds(1d);
yield return null;
}
Debug.LogError(futureDate.DayOfWeek); // считаем до секунды, сколько осталось времени
Debug.LogError(futureDate.TimeOfDay); // до понедельника
}
Ответы (1 шт):
Код не проверял, но по идее должно быть как-то так:
futureDate = DateTime.Today.AddDays((7 + (int) DayOfWeek.Monday - (int) Datetime.Today.DayOfWeek) % 7)
var seconds = (futureDate - DateTime.Now).TotalSeconds;
Спасибо aepot за вторую строчку.
Переводим разницу между искомым днём недели и текущим днём недели в положительное значение и берём по модулю 7, чтобы получилось число от 0 до 6. Это и будет искомое число дней, которое нужно добавить к текущей дате (с нулевым временем), для этого берём Today.
Ну и потом считаем разницу с Now и берём от неё секунды.
Ну, если я всё правильно понял.