Shell中计算两个日期天数差报错:value too great for base
问题解决:Shell计算日期天数差报错处理
错误原因
你直接在算术扩展$((...))里对2023-10-08这类字符串做减法,存在两个核心问题:
- Shell会把开头带
0的数字解析为八进制数,而八进制体系中没有9,所以09会触发"value too great for base"错误; - 日期字符串本身不是数字类型,直接做减法完全不符合逻辑,无法得到有效时间差。
正确解决方案
用date命令将日期字符串转换为Unix时间戳(从1970-01-01到目标日期的总秒数),再通过时间戳差值计算天数差。
GNU/Linux环境脚本
date1="2023-10-08" date2="2023-10-09" # 转换日期为Unix时间戳(秒) timestamp1=$(date -d "$date1" +%s) timestamp2=$(date -d "$date2" +%s) # 计算天数差:总秒数差除以一天的秒数(60*60*24=86400) DIFF=$(( (timestamp2 - timestamp1) / 86400 )) if [ $DIFF -eq 1 ]; then echo "one day ago.." else echo "many dayzz" fi
macOS环境脚本
macOS自带的date命令语法不同,需调整时间戳转换方式:
date1="2023-10-08" date2="2023-10-09" # 转换日期为Unix时间戳(秒) timestamp1=$(date -j -f "%Y-%m-%d" "$date1" +%s) timestamp2=$(date -j -f "%Y-%m-%d" "$date2" +%s) # 计算天数差 DIFF=$(( (timestamp2 - timestamp1) / 86400 )) if [ $DIFF -eq 1 ]; then echo "one day ago.." else echo "many dayzz" fi
内容的提问来源于stack exchange,提问作者Aviator
相关产品推荐
相关产品推荐

