dshimizu/blog

アルファ版

Go でその月の特定の曜日の日付を取得する

はじめに

Go でその月の特定の曜日のすべての日付を取得したかったので調べました。

サンプルコード

time パッケージを使えば取得できそうでした。 下記は、実行した月のすべての月曜日の日付を取得する場合のサンプルコードです。

package main

import (
    "fmt"
    "time"
)

func GetAllMondayOfMonth(year int, month time.Month) []time.Time {
    var mondayOfMonth []time.Time

    // 指定された年と月の初日を取得する
    firstDayOfMonth := time.Date(year, month, 1, 0, 0, 0, 0, time.UTC)

    // その月の最終日を取得する
    nextMonthFirstDay := firstDayOfMonth.AddDate(0, 1, 0)
    lastDayOfMonth := nextMonthFirstDay.AddDate(0, 0, -1)

    // 初日から最終日まで1日ずつループして、月曜日を取得する
    for d := firstDayOfMonth; d.Before(lastDayOfMonth.AddDate(0, 0, 1)); d = d.AddDate(0, 0, 1) {
        if d.Weekday() == time.Monday {
            mondayOfMonth = append(mondayOfMonth, d)
        }
    }

    return mondayOfMonth
}

func main() {
    nowDate := time.Now()
    year := nowDate.Year()
    month := nowDate.Month()

    allMondayOfMonth := GetAllMondayOfMonth(year, month)
    for _, monday := range allMondayOfMonth {
        fmt.Printf("%s\n", monday.Format("2006-01-02"))
    }
}

実行してみます。

% go run main.go
2023-08-07
2023-08-14
2023-08-21
2023-08-28

参考