Как напечатать конкретную дату между двумя датами, используя golang? - PullRequest
0 голосов
/ 16 мая 2018

Я извлекаю start_date и end_date из БД.Через цикл for я буду печатать даты между (например, понедельник, вторник, ... так далее).У меня тоже такая же ситуация: я печатаю даты между двумя датами, но я хочу, чтобы, если я получаю данные за понедельник, тогда будут показываться наступающие понедельники, а не все дни.Если я получаю данные за вторник, то отображаются только даты вторника, когда я пробовал код, но он будет печатать все дни, как я получу ожидаемый результат

код: -

func GetSchedule(c *gin.Context) {
response := ResponseControllerList{}
selected_day:= "Monday"
conditions := bson.M{"day":selected_day}
data, err := models.GetSchedulingListing(conditions) 
for i := range data {
    start_date := data[i].StartDate
    end_date := data[i].EndDate
    start_time := data[i].StartTime
    end_time := data[i].EndTime
    start_working_hours := time.Unix(start_time,0).Format("3:04PM")
    end_working_hours := time.Unix(end_time,0).Format("3:04PM")
    days := time.Unix(end_date,0).Sub(time.Unix(start_date,0)).Hours() / 24
    for i := 1; i <= int(days+1); i++ {
        // fmt.Println(i)
        // fmt.Println(start_date)
        fmt.Println(time.Unix(start_date,0).Format("Monday, 01-02-2006")+" "+ start_working_hours+" "+ end_working_hours)
        start_date = start_date + 86400
    }
}
dataCount, err := models.GetRecordsCount(config.ScheduleCollection, conditions)
if err != nil {
    response = ResponseControllerList{
        config.FailureCode,
        config.FailureFlag,
        config.FailureMsg,
        nil,
        nil,
    }
} else {
    response = ResponseControllerList{
        config.SuccessFlag,
        config.SuccessFlag,
        config.SuccessMsg,
        data[0],
        dataCount,
    }
}
GetResponseList(c, response)
}

См. В условии, я прохожу понедельник, но он возвращает все дни в выходных данных: -

Выходные данные -

Tuesday, 05-01-2018 8:00AM 10:00AM
Wednesday, 05-02-2018 8:00AM 10:00AM
Thursday, 05-03-2018 8:00AM 10:00AM
Friday, 05-04-2018 8:00AM 10:00AM
Saturday, 05-05-2018 8:00AM 10:00AM
Sunday, 05-06-2018 8:00AM 10:00AM
..Soo on up to end date 

Ожидаемый результат Если я даю условие То только в понедельник, то: -

Monday, 05-07-2018 8:00AM 10:00AM
...Next Monday date

Если я приведу условие во вторник, тогда

Tuesday, 05-01-2018 8:00AM 10:00AM
... next Tuesday date

База данных

{
"_id" : 1,
"day" : "Monday",
"start_date" : NumberLong(1525132800),
"end_date" : NumberLong(1527638400),
"start_time" : NumberLong(9000),
"end_time" : NumberLong(16200),
"added_on" : NumberLong(1526442426),
"occurence" : "repeat",
"updated_on" : NumberLong(0)
}
{
"_id" : 2,
"day" : "Monday",
"start_date" : NumberLong(1525132800),
"end_date" : NumberLong(1527638400),
"start_time" : NumberLong(27000),
"end_time" : NumberLong(34200),
"added_on" : NumberLong(1526442426),
"occurence" : "repeat",
"updated_on" : NumberLong(0)
}
{
 "_id" : 3,
 "day" : "Tuesday",
 "start_date" : NumberLong(1525132800),
 "end_date" : NumberLong(1527638400),
 "start_time" : NumberLong(27000),
 "end_time" : NumberLong(34200),
 "added_on" : NumberLong(1526442426),
 "occurence" : "repeat",
 "updated_on" : NumberLong(0)
}

1 Ответ

0 голосов
/ 16 мая 2018

Я могу оставить вам несколько советов о том, как вы можете достичь цели:

получить дни недели между двумя датами, которые удовлетворяют данному предикату?

Следуйте этому фрагменту кода, надеюсь, он даст некоторые подсказки о том, как достичь желаемой цели.

Это более прямо: https://play.golang.org/p/-zQYNWtgHZ2

Это немного больше дизайнерских решений: https://play.golang.org/p/qHlsCoQkSiQ

  • Обращаем ваше внимание, что вам следует применять фильтрацию / выборку по дням недели, например func admitAllWeekDays.
  • Также обратите внимание, что день недели имеет свою реализацию в виде целого числа.

Оставляя в стороне ответ, Slack, вам нужно немного организовать свой код.Я вижу, что вы боретесь немного больше, чем сама проблема, которую вы представляете как вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...