У меня есть бот для телеграмм, который помогает пользователям уведомлять, если они опаздывают на работу. Итак, они пишут, поскольку я приду в 12:00, и я получаю строку, которую я должен проверить, разрешено ли время, которое они написали.
Например: если они напишут мне, я приду в 12:00, но time.Now()
11:00, поэтому я выдаю им ошибку
Проблема в том, как сравнить их местное время с время, которое они отправили через бота, если они находятся по всему миру, а мой бот-сервер настроен в другой стране. Как узнать их местное время?
У меня есть 2 решения
- Получить местоположение пользователя через IP, GPS
- использовать if, case
Есть ли у тебя другие идеи? Буду признателен, если вы мне поможете.
Фрагмент кода для сравнения с моим местным временем
func getArrivalTime(text string, status string) (time.Time, error) {
var arrivalTime time.Time
rule := regexp.MustCompile(`([0-9]|1[0-9]|2[0-3])((\:)|(\.))[0-5][0-9]`)
timeStr := rule.FindStringSubmatch(text)
if len(timeStr) == 0 {
log.Println("ERROR OCCURED")
return time.Time{}, errors.New("Wrong time format or omitted")
}
timeFormatted := strings.Replace(timeStr[0], ".", ":", 1)
date := fmt.Sprintf("%vT%v:00+00:00", time.Now().Format("2006-01-02"), timeFormatted)
arrivalTime, err := time.Parse(time.RFC3339, date)
if strings.Contains(text, "/завтра") && status == "late" {
arrivalTime = arrivalTime.Add(time.Hour * 24)
}
arrivalTimeUtc, _ := ConvertToUTC(arrivalTime)
nowUtc, _ := ConvertToUTC(time.Now())
nowUtc = nowUtc.Add(time.Hour * 5)
if arrivalTimeUtc.After(nowUtc) == false && status != "lateButInOffice" {
log.Println("ERROR OCCURED")
return time.Time{}, errors.New("Wrong time format or omitted")
}
if err != nil {
log.Println(err)
}
return arrivalTime, err
}