date - 获取上周一日期

标签 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


}

最佳答案

这可以相当简单地完成,利用 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
}

演示:

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

关于date - 获取上周一日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54177503/

相关文章:

php - 如何在 PHP 中将日期格式化为意大利语?

PHP:使用 DateTime::modify 将两个 DateTime 对象的差异添加到另一个日期

tcl - 在 tcl 中格式化 HTTP 响应 header

tcl - 用于 TCL 列表的 Foreach

Excel计算 "7/6/2012 10:26:42"单元格与今天的日期差

php 比较日变化的日期

TCL proc 和字节码编译 - 链接是什么?

list - 如何将列表传递给 TCL 中的 proc?

tcl - 一段时间后套接字超时

php - 日期(天)更改时添加新行 - MySQL、PHP