shell 获取某自然月的天数或两个日期间隔的天数

shell 获取某自然月的天数或两个日期间隔的天数

获取自然月的天数

思路:

通过输入的年月,来先增加一个月再减去一天,就得到输入月份的月底的日期,即天数!

脚本如下:(+1month -1day)

#使用date命令,获取出自然月的天数"
echo "年月格式:2022年2月,则输入202202"
read -p "请输入年月份:" VAR
DAY=` date  -d "+1month -1day ${VAR}01" +%d`
echo "${VAR:0:4}年${VAR:5:6}月 中有$DAY天"

完善脚本:增加输入的日期格式判断

#使用date命令,获取出自然月的天数"
echo "年月格式:2022年2月,则输入202202"
read -p "请输入年月份:" VAR
date -d ${VAR}01 >>/dev/null 2>&1
if [ $? -eq 0 ];then
DAY=` date  -d "+1month -1day ${VAR}01" +%d`
echo "${VAR:0:4}年${VAR:5:6}月 中有$DAY天"
else
echo "日期格式错误,请重新输入!"
fi

获取两个日期间隔的天数

通过date +%s获取距离1970年1月1日 00:00:00 的秒数

例:获取两个时间段之间的天数:20220103~20220203

为方便理解,我将脚本拆分后如下:

#获取20220103距离1970年1月1日00:00:00 的秒数
start=$(date -d 20220103 +%s)

#获取20220103距离1970年1月1日00:00:00 的秒数
end=$(date -d 20220203 +%s)

#时差(秒)=结束日期(秒数)-开始日期(秒数)
diff=$((  $end -$start ))

#相差天数= 时差(秒)/86400    (#1天=86400秒)
diffDAY=$((  $diff/86400 ))

echo 20220103~20220203,差距$diffDAY 天

上面的脚本写到一行即:

###最后写到一行
diffDAY=$((  ( $(date -d 20220203 +%s) - $(date -d 20220103 +%s) )/86400 ))
echo 20220103~20220203,差距$diffDAY 天

拓展!

cal 命令,是linux自带的日历,也可以通过脚本获取自然月的天数!

cal “日 月 年

选项:
  -1, --one        只显示当前月份(默认)
  -3, --three      显示上个月、当月和下个月
  -s, --sunday     周日作为一周第一天
  -m, --monday     周一用为一周第一天
  -j, --julian     输出儒略日
  -y, --year       输出整年
  -V, --version    显示版本信息并退出
  -h, --help       显示此帮助并退出
https://qnimg.ffing.cn/wp-content/uploads/2022/02/image-3.png?imageView2/0/q/75|watermark/1/image/aHR0cHM6Ly9xbmltZy5mZmluZy5jbi9mbl9sb2dvLnBuZw==/dissolve/55/gravity/SouthEast/dx/0/dy/0
#使用cal命令,获取自然月的天数
echo "年月格式:2022年2月,则输入202202"
read -p "请输入年月份:" VAR
DAY=`cal ${VAR:5:6} ${VAR:0:4}|grep -v ^$|awk 'END{print $NF}'`
echo "${VAR:0:4}年${VAR:5:6}月 中有$DAY天"
#看我上面完善脚本:可自行增加输入的日期格式判断
good good study, day day up!

发表评论

textsms
account_circle
email

shell 获取某自然月的天数或两个日期间隔的天数
获取自然月的天数 思路: 通过输入的年月,来先增加一个月再减去一天,就得到输入月份的月底的日期,即天数! 脚本如下:(+1month -1day) #使用date命令,…
扫描二维码继续阅读
2022-02-10