获取上周六的日期 - BusyBox 1.1.0

cui*_*ter 4 date sh busybox

由于 BusyBox 中的日期不如gnu date强大,因此我在计算上周六的日期时遇到问题。

last_sat=`date +"%Y-%m-%d" -d "last saturday"`
Run Code Online (Sandbox Code Playgroud)

只适用于 gnu date。

我发现了类似的东西可以从 Epoch 计算

busybox date -D '%s' -d "$(( `busybox date +%s`+3*60 ))"
Run Code Online (Sandbox Code Playgroud)

但我的 BusyBox (v1.1.0) 无法识别该-D参数。

有什么建议么?

Eri*_*ric 6

今天之前的最后一个星期六,在 busybox 1.16 下:

date -d "UTC 1970-01-01 $(date +"%s - 86400 - %w * 86400"|xargs expr) secs"
Run Code Online (Sandbox Code Playgroud)

工作原理:获取当前日期(以秒为单位),减去一天,再减去一天乘以当前工作日的数字,然后将这些秒转换回日期。

编辑:将 1.1 版本拼凑在一起后,可以正常工作:

date -d "1970.01.01-00:00:$(date +"%s - 86400 - %w * 86400"|xargs expr)"
Run Code Online (Sandbox Code Playgroud)

该工作版本基于代码读取:

} else if (t = *tm_time, sscanf(t_string, "%d.%d.%d-%d:%d:%d", &t.tm_year,
                    &t.tm_mon, &t.tm_mday, 
                    &t.tm_hour, &t.tm_min,
                        &t.tm_sec) == 6) {
    t.tm_year -= 1900;  /* Adjust years */
    t.tm_mon -= 1;  /* Adjust dates from 1-12 to 0-11 */
Run Code Online (Sandbox Code Playgroud)