将周数转换为bash中的日期范围

在不同的论坛上已经多次询问了这个问题,但是,我没有找到适合我的那个。

The best I could reach is the reply to this question: UNIX date: How to convert week number to a date range (Mon-Sun)?

function weekof()
{
    local week=$1 year=$2
    local week_num_of_Jan_1 week_day_of_Jan_1
    local first_Mon
    local date_fmt="+%a %b %d %Y"
    local mon sun

    week_num_of_Jan_1=$(date -d $year-01-01 +%W)
    week_day_of_Jan_1=$(date -d $year-01-01 +%u)

    if ((week_num_of_Jan_1)); then
        first_Mon=$year-01-01
    else
        first_Mon=$year-01-$((01 + (7 - week_day_of_Jan_1 + 1) ))
    fi

    mon=$(date -d "$first_Mon +$((week - 1)) week" "$date_fmt")
    sun=$(date -d "$first_Mon +$((week - 1)) week + 6 day" "$date_fmt")
    echo "\"$mon\" - \"$sun\""
}

weekof $1 $2

但是,它给出的日期范围要提前一个星期。例如第20周和2020年应该返回的日期范围是5月11日至17日。但是给5月18日至5月24日。

请帮忙。

评论
  • Gold
    Gold 回复

    正如评论中已经提到的,无论周数取决于语言环境;您的功能可以大大简化为:

    #!/usr/bin/env bash
    
    weekof ()
    {
      [ $# -eq 2 ] || return 2
      date --date "monday week $1 year $2"
      date --date "sunday week $1 year $2"
    }
    
    weekof "$@"