我想获得给定日期的最后一个星期一日期.例如,如果我的输入是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)
这可以通过利用clock scan具有相当复杂的解析器的事实来相当简单地完成,并且您可以通过-base选项提供所有内容相对的时间戳.此外,双方clock scan并clock 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)