/** * TrackerMap * Copyright (C) 2021-2022 Iván Ávalos , Henoch Ojeda * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ package mx.trackermap.TrackerMap.utils import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.datetime.* @DelicateCoroutinesApi class ReportDates { enum class ReportPeriod { TODAY, LAST_24, YESTERDAY, THIS_WEEK, LAST_7, THIS_MONTH, LAST_30 } companion object { private fun formatDateTime(dateTime: LocalDateTime, timezone: TimeZone) = dateTime.toInstant(timezone).toString() fun getDates(period: ReportPeriod): Pair { val timezone = TimeZone.currentSystemDefault() val clock = Clock.System val instant = clock.now() val dateTime = instant.toLocalDateTime(timezone) val date = dateTime.date var currentDate: LocalDateTime? = null var previousDate: LocalDateTime? = null when (period) { ReportPeriod.TODAY -> { previousDate = date.atTime(0, 0) currentDate = dateTime } ReportPeriod.LAST_24 -> { previousDate = instant .minus(1, DateTimeUnit.DAY, timezone) .toLocalDateTime(timezone) currentDate = dateTime } ReportPeriod.YESTERDAY -> { val yesterday = instant .minus(1, DateTimeUnit.DAY, timezone) .toLocalDateTime(timezone).date previousDate = yesterday.atTime(0, 0) currentDate = yesterday.atTime(23, 59) } ReportPeriod.THIS_WEEK -> { previousDate = instant .minus(date.dayOfWeek.isoDayNumber - 1, DateTimeUnit.DAY, timezone) .toLocalDateTime(timezone).date .atTime(0, 0) currentDate = dateTime } ReportPeriod.LAST_7 -> { previousDate = instant .minus(1, DateTimeUnit.WEEK, timezone) .toLocalDateTime(timezone).date .atTime(0, 0) currentDate = dateTime } ReportPeriod.THIS_MONTH -> { previousDate = instant .minus(date.dayOfMonth - 1, DateTimeUnit.DAY, timezone) .toLocalDateTime(timezone).date .atTime(0, 0) currentDate = dateTime } ReportPeriod.LAST_30 -> { previousDate = instant .minus(1, DateTimeUnit.MONTH, timezone) .toLocalDateTime(timezone).date .atTime(0, 0) currentDate = dateTime } } return Pair( formatDateTime(currentDate, timezone), formatDateTime(previousDate, timezone) ) } } }