Для цикла в то время как time.Now () достигнут - PullRequest
0 голосов
/ 10 января 2019

Возможно ли в Голанге увеличивать дату в цикле for на указанную переменную даты, пока она не достигнет текущей даты / времени. Now ()

// Start date
t, _ := time.Parse(time.RFC3339, "2018-07-19T12:25:10.8584224+02:00")

// Current date
ct := time.Now()

for d := t; d.Day() == ct.Day(); d = d.AddDate(0, 0, 1) {
    // Print all days between start date and current date 
    fmt.Println(d)
}

Я ожидаю, что переменная d выводит все даты (со временем и т. Д.), Пока не достигнет текущей даты

Ответы [ 4 ]

0 голосов
/ 16 января 2019

по Годоку: https://golang.org/pkg/time/#Time.Day

func (t Time) Day() int

День возвращает день месяца, указанного т.

Так что сравнение d.Day () и ct.Day () не подходит. Что, если сегодня «2019-01-01», а вы начинаете «2018-12-23»?

Правильный способ сравнения двух раз. Время - https://golang.org/pkg/time/#Time.After

func (t Time) After(u Time) bool
func (t Time) Before(u Time) bool

После сообщает, является ли момент времени t после u. Перед отчетами, находится ли момент времени t перед u.

Так что решение @Alex Pliutau более распространено. Но сегодня нужно быть осторожнее.

package main

import (
    "fmt"
    "time"
)

func main() {
    t, _ := time.Parse(time.RFC3339, "2009-11-02T12:25:10.8584224+02:00")

    // truncate to 0:0:0
    t = t.Truncate(24 * time.Hour)
    fmt.Println("start time is:", t)

    // Current date truncate to 0:0:0
    ct := time.Now().Truncate(24 * time.Hour)
    fmt.Println("now is:", ct)
    fmt.Println("---------------")

    // for t.Before(ct) {  //if you don't want to print the date of today
    for !t.After(ct) {
        // Print all days between start date and current date
        fmt.Println(t.Format("2006-01-02 15:04:05"))
        t = t.AddDate(0, 0, 1)
    }
}

Выход:

start time is: 2009-11-02 02:00:00 +0200 +0200
now is: 2009-11-10 00:00:00 +0000 UTC
---------------
2009-11-02 02:00:00
2009-11-03 02:00:00
2009-11-04 02:00:00
2009-11-05 02:00:00
2009-11-06 02:00:00
2009-11-07 02:00:00
2009-11-08 02:00:00
2009-11-09 02:00:00
2009-11-10 02:00:00

https://play.golang.org/p/iMr7M5W9K4N

0 голосов
/ 10 января 2019

Основываясь на ваших комментариях, вам нужно указать Format дату чего-то ценного:

package main

import (
    "fmt"
    "log"
    "time"
)

func main() {
    start, err := time.Parse("2006-1-2", "2018-1-1")
    if err != nil {
        log.Fatal(err)
    }

    for d := start; d.Month() == start.Month(); d = d.AddDate(0, 0, 1) {
        fmt.Println(d.Format("2006-1-2"))
    }
}

Вот более простая версия вашего кода (я использовал нестандартный формат времени, потому что я не хотел редактировать синтаксис RFC, но в конечном итоге это то же самое) = Я также повторяю месяц для краткости.

0 голосов
/ 10 января 2019
package main

import (
    "fmt"
    "time"
)

func main() {
    t, _ := time.Parse(time.RFC3339, "2018-07-19T12:25:10.8584224+02:00")

    ct := time.Now()

    for t.Before(ct) {
        fmt.Println(t)
        t.AddDate(0, 0, 1)
    }
}
0 голосов
/ 10 января 2019

получите правильное условие цикла и ..

package main

import (
    "fmt"
    "time"
)

func main() {
    fmt.Println("Hello, playground")
    t, _ := time.Parse(time.RFC3339, "2018-07-19T12:25:10.8584224+02:00")

    // Current date
    ct := time.Now()

    for d := t; d.Day() >= ct.Day(); d = d.AddDate(0, 0, 1) {
        // Print all days between start date and current date
        fmt.Println(d)
    }
}

Hello, playground
2018-07-19 12:25:10.8584224 +0200 +0200
2018-07-20 12:25:10.8584224 +0200 +0200
2018-07-21 12:25:10.8584224 +0200 +0200
2018-07-22 12:25:10.8584224 +0200 +0200
2018-07-23 12:25:10.8584224 +0200 +0200
2018-07-24 12:25:10.8584224 +0200 +0200
2018-07-25 12:25:10.8584224 +0200 +0200
2018-07-26 12:25:10.8584224 +0200 +0200
2018-07-27 12:25:10.8584224 +0200 +0200
2018-07-28 12:25:10.8584224 +0200 +0200
2018-07-29 12:25:10.8584224 +0200 +0200
2018-07-30 12:25:10.8584224 +0200 +0200
2018-07-31 12:25:10.8584224 +0200 +0200

https://play.golang.org/p/yRBTUZKfseG

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