我做了以下功能:
#!/bin/bash
function calc_date(){
odate=$1
op=$2
days=$3
echo $(date "--date=$odate $op $days day" +%d%m%y)
}
如果我这样称呼它:
mydate=$(calc_date '2014-02-22' '+' '2')
echo "$mydate"
返回:
240214
现在我正试图通过这种方式调用函数获得相同的输出:
mydate=$(calc_date '220214' '+' '2')
echo "$mydate"
如何将作为参数传递的日期格式化为ddmmyy
格式?
答案 0 :(得分:1)
您遗漏date
未正确解释220214
。它被解释为2022-02-14
(而不是2014-02-22
)。
一种解决方案是更改或调整您的格式:
$ date --date "2014-02-12 2 days ago"
Mon Feb 10 00:00:00 CET 2014
答案 1 :(得分:1)
重新格式化日期:
#!/bin/bash
function calc_date(){
odate=$(echo $1 | sed -r 's/(..)(..)(..)/\3\2\1/')
op=$2
days=$3
echo $(date "--date=$odate $op $days day" +%d%m%y)
}
这里sed
只是在2个组中匹配6个字符,然后以相反的顺序将它们打印出来。所以220214变为140222.这适用于date
,它将6个字符的数字日期字符串识别为YYmmdd
。
答案 2 :(得分:0)
如果您的日期倒退(即您的$ op为负数),您需要在“2天”之后加上“之前”字样
date --date='2 day ago'
答案 3 :(得分:0)
这也是你可以尝试的。
#!/bin/bash
DAYS=2
CURRENTDATE="$(date +%Y%m%d)"
echo "$CURRENTDATE"
OLDERDATE="$(date "+%Y%m%d" -d "$DAYS days ago ")"
echo "$OLDERDATE"
答案 4 :(得分:0)
最明确的解决方案:
#!/bin/bash
function calc_date(){
odate=$(date -d "$1" +%d%m%y)
op=$2
days=$3
echo $(date "--date=$odate $op $days day" +%d%m%y)
}
示例:
mydate=$(calc_date '220214' '-' '2')
echo "$mydate"
mydate=$(calc_date '220214' '+' '3')
echo "$mydate"
结果:
200214
250214