PHPでプレミアムフライデーかどうか判定する のGolang版。
Goは日付の扱いが難しいですね。もっといい方法がありそうです。
package main
import (
"fmt"
"time"
)
func main() {
fmt.Println(IsPremiumFriday("2017-02-24")) // true
fmt.Println(IsPremiumFriday("2017-02-25")) // false
fmt.Println(IsPremiumFriday("2017-03-31")) // true
fmt.Println(IsPremiumFriday("2017-12-29")) // true
}
// IsPremiumFriday returns bool
func IsPremiumFriday(datestr string) bool {
// 入力日付
d1, err := time.Parse("2006-01-02", datestr)
if err != nil {
return false
}
// 翌月の初日を得る
d2 := d1.AddDate(0, 1, 0)
d2 = time.Date(d2.Year(), d2.Month(), 1, 0, 0, 0, 0, time.UTC)
// 一日ずつ減らして最初の金曜日を設定
for d2.Weekday() != time.Friday {
d2 = d2.AddDate(0, 0, -1)
}
return d1.Equal(d2)
}