func ParseDuration()

in internal/commands/interceptor/duration.go [106:139]


func ParseDuration(start, end string, userStep api.Step) (startTime, endTime time.Time, step api.Step, dt utils.DurationType) {
	logger.Log.Debugln("Start time:", start, "end time:", end, "timezone:", time.Local)

	now := time.Now()

	// both are absent
	if start == "" && end == "" {
		return now.Add(-30 * time.Minute), now, api.StepMinute, utils.BothAbsent
	}

	var err error

	// both are present
	if start != "" && end != "" {
		if userStep, startTime, err = TryParseTime(start, userStep); err != nil {
			logger.Log.Fatalln("Unsupported time format:", start, err)
		}
		if step, endTime, err = TryParseTime(end, userStep); err != nil {
			logger.Log.Fatalln("Unsupported time format:", end, err)
		}

		return startTime, endTime, step, utils.BothPresent
	} else if end == "" { // end is absent
		if step, startTime, err = TryParseTime(start, userStep); err != nil {
			logger.Log.Fatalln("Unsupported time format:", start, err)
		}
		return startTime, startTime.Add(30 * utils.StepDuration[step]), step, utils.EndAbsent
	}
	// start is absent
	if step, endTime, err = TryParseTime(end, userStep); err != nil {
		logger.Log.Fatalln("Unsupported time format:", end, err)
	}
	return endTime.Add(-30 * utils.StepDuration[step]), endTime, step, utils.StartAbsent
}