获取上周一的星期一日期

Aro*_*oon 2 date tcl

我想获得给定日期的最后一个星期一日期.例如,如果我的输入是190113我想要的输出190107是上周一.

if {$current_date == "Mon"} {

    set startday [clock seconds]
    set startday [clock format $startday -format %y%m%d]
    puts $startday

} else {

    puts "no monday today"
    #I don't know how to get last monday date


}
Run Code Online (Sandbox Code Playgroud)

Don*_*ows 8

这可以通过利用clock scan具有相当复杂的解析器的事实来相当简单地完成,并且您可以通过-base选项提供所有内容相对的时间戳.此外,双方clock scanclock format采取-format选项,以便您可以指定究竟是什么在你的输入和输出数据回事.

proc getLastMonday {baseDate} {
    set base [clock scan $baseDate -format "%y%m%d"]
    set timestamp [clock scan "12:00 last monday" -base $base]
    return [clock format $timestamp -format "%y%m%d"]
    # This would work as a one-liner, provided you like long lines
}
Run Code Online (Sandbox Code Playgroud)

演示:

puts [getLastMonday 190113];  # ==> 190107
puts [getLastMonday 190131];  # ==> 190128
Run Code Online (Sandbox Code Playgroud)