首页 > 解决方案 > 获取上周一的日期

问题描述

我想获取给定日期的最后一个星期一日期。例如,如果我的输入是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


}

标签: datetcl

解决方案


这可以通过利用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
}

演示:

puts [getLastMonday 190113];  # ==> 190107
puts [getLastMonday 190131];  # ==> 190128

推荐阅读