免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: ouiki
打印 上一主题 下一主题

[日期时间] date 获得上个月日期的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2013-03-29 14:58 |只看该作者
yestreenstars 发表于 2013-03-29 14:55
@pix77
你这个方法在3月1日用也一样是会出错的~

哈哈,用shell是王道

论坛徽章:
0
12 [报告]
发表于 2013-03-29 15:01 |只看该作者
pix77 发表于 2013-03-29 14:58
哈哈,用shell是王道


shell脚本?
脚本的话,有什么简单的方法么?

论坛徽章:
0
13 [报告]
发表于 2013-03-29 15:03 |只看该作者
借用了一个代码:
#!/bin/bash
cur_month=`date +%m`
cur_year=`date +%Y`
prev_month=$(($cur_month-1))

# Check to see if this is January
if [ $prev_month -lt 1 ]
then
prev_year=$(($cur_year-1))
prev_month=12
LastDayOfMonth=`/usr/bin/cal $prev_month $cur_year | grep -v "^$" | sed -n  '1p;$p' | tr "\n" " "  | awk '{print substr($1,1,3),$NF,$2}'`
else
LastDayOfMonth=`/usr/bin/cal $prev_month $cur_year | grep -v "^$" | sed -n  '1p;$p' | tr "\n" " "  | awk '{print substr($1,1,3),$NF,$2}'`
fi
echo $LastDayOfMonth

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
14 [报告]
发表于 2013-03-29 15:22 |只看该作者
  1. date '+%Y %m' | awk '{if($2==1){$1--;$2=12}else $2--;printf "%d%02d\n",$1,$2}'
复制代码

论坛徽章:
0
15 [报告]
发表于 2013-03-29 15:23 |只看该作者
回复 3# ouiki


    date --date='1 month ago' '+%Y%m'

系统先查找今天的日志,3月29日, 一个月前的话,系统会认为是2月29日,
但是2月没有29号,系统会接着查找有没有2月28日有没有这个日期,发现有,接着系统会系统2月28日的下面1天是2月29日发给你,其实也就是发送3月1日给你

自己猜的

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
16 [报告]
发表于 2013-03-29 15:28 |只看该作者
回复 13# pix77


    这也太麻烦了吧~

论坛徽章:
0
17 [报告]
发表于 2013-03-29 15:32 |只看该作者
这真是个bug啊?

论坛徽章:
0
18 [报告]
发表于 2013-03-29 17:01 |只看该作者
回复 16# yestreenstars


    不花一分力气,有什么麻烦的

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
19 [报告]
发表于 2013-03-29 17:17 |只看该作者
@pix77
看看我后面写的那个是不是简单多了?呵呵~

论坛徽章:
13
CU大牛徽章
日期:2013-04-17 11:20:3615-16赛季CBA联赛之吉林
日期:2017-05-25 16:45:4715-16赛季CBA联赛之福建
日期:2017-03-13 11:33:442017金鸡报晓
日期:2017-02-08 10:39:422017金鸡报晓
日期:2017-01-10 15:13:29IT运维版块每日发帖之星
日期:2016-03-15 06:20:01IT运维版块每日发帖之星
日期:2015-10-02 06:20:00CU十二周年纪念徽章
日期:2013-10-24 15:41:34CU大牛徽章
日期:2013-09-18 15:15:45CU大牛徽章
日期:2013-09-18 15:15:15CU大牛徽章
日期:2013-04-17 11:46:39CU大牛徽章
日期:2013-04-17 11:46:28
20 [报告]
发表于 2013-03-29 21:40 |只看该作者
本帖最后由 xdsnet 于 2013-03-29 21:41 编辑

楼主界定不够清楚啊,只要月份,还是要年月份?
如果仅仅是月份则

  1. #!/bin/bash
  2. #获取当前年月信息
  3. cur_m=`date +%m`
  4. cur_y=`date +%y`
  5. #计算前1月和前2月月份信息
  6. prev_1m=$((($cur_m+11)%12))
  7. prev_2m=$((($cur_m+10)%12))
  8. #年度调整参数1
  9. prev_1yr = 0
  10. #年度调整参数2
  11. prev_2yr = 0

  12. # 确认是否是12月进行调整
  13. if [ $prev_1m -lt 1 ]
  14. then
  15.   prev_1yr=1
  16.   prev_1m=12
  17. fi

  18. if [ $prev_2m -lt 1 ]
  19. then
  20.   prev_2yr=1
  21.   prev_2m=12
  22. fi
  23. # 最终年调整结果
  24. prev_1y= $(($cur_y - $prev_1yr ))
  25. prev_2y= $(($prev_1y - $prev_2yr))

  26. #最终结果
  27. echo "前1月年月:${prev_1y}年${prev_1m}月"
  28. echo "前2月年月:${prev_2y}年${prev_2m}月"
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP