SHELL脚本获取某天的上一周日期(星期一为第一天)
2013-08-14 15:08
281 查看
最近天天写SHELL,写到想吐,没有系统学习SHELL,写的时候出现很多问题,觉得挺吃力的!
特别是关于时间的,之前接了一个需求,获取某天的上一周的星期一和最后一天星期日的日期
网上找了很久都没找到,唯有用自己的方法写了一个SHELL的算法了,写这么一个东西研究了半天
我真的向SHELL吐槽,怎么那么难用。。。
上述代码经过测试,有个跨年的BUG,修复版本
特别是关于时间的,之前接了一个需求,获取某天的上一周的星期一和最后一天星期日的日期
网上找了很久都没找到,唯有用自己的方法写了一个SHELL的算法了,写这么一个东西研究了半天
我真的向SHELL吐槽,怎么那么难用。。。
#!/bin/bash #########注意:这里获取的是'某天'的'上一周'时间############ #得到今天是第几周 this_week=$(date +%W) #得到某天是第几周 before_week=$(date -d $* +%W) #某天-今天=周差 subweek=$[before_week-$this_week-1] #利用加减周数获取,获取某周的‘今天’ today=`date -d "$subweek week" +%Y%m%d` #获取today究竟是一个周的哪一天 whichday=$(date -d $today +%w) #用(today-whichday)+1,就是某周的第一天,这里是星期一 startday=`date -d "$today -$[${whichday}-1] days" +%Y%m%d` #某周的最后一天,星期日为最后一天 endday=`date -d "$startday +6 days" +%Y%m%d` echo $startday echo $endday #get week by year : 2013W32 week=$(date -d $startday +%W) year=$(date -d $* +%Y) yearweek=${year}W${week}
上述代码经过测试,有个跨年的BUG,修复版本
#取得入参的时间 indate=$*; if [ ! $indate ]; then indate=$(date +%Y%m%d) fi #取得统计日期(一般为入参的上周的今天) statday=`date -d "$indate -1 weeks" +%Y%m%d` #得到是当周的周几 (0为星期日,1为星期一,...6为星期六) whichday=$(date -d $statday +%w) #用(statday-whichday)+1,就是某周的第一天,这里是星期一 if [ $whichday == 0 ]; then startday=`date -d "$statday -6 days" +%Y%m%d` else startday=`date -d "$statday -$[${whichday} - 1] days" +%Y%m%d` fi #某周的最后一天,星期日为最后一天 endday=`date -d "$startday +6 days" +%Y%m%d`
相关文章推荐
- 获取一周的星期一日期和一个月的第一天星期
- 【C#日期系列(一)】--C#获取某月第一天0分0秒以及最后一天59分59秒
- java获取本周第一天的日期
- c# 获取某日期所在周的第一天和最后一天
- 获取年、月、周、日等第一天和最后一天日期
- Oracle数据库获取前一天日期、当月第一天日期
- 获取之前(某天、某月、某年)的日期
- 获取某一个日期所在周的第一天
- js获取当前日期时间,昨天、本月第一天和最后一天
- Java 常用日期函数:获取当天日期、本周第一天等函数
- PHP 日期格式化(获取上月第一天、最后一天等)
- mysql获取当前日期的前任意一天或后任意某天
- 【java】获取一年里某季、某月、某周的第一天及最后一天时间(日期工具类)
- 获取一年中按星期归类(星期一、星期二...)所有日期
- 根据日期获取当月第一天和当月最后一天
- 获取当前周、上一周、下一周的日期
- PHP 获取某个月第一天及最后一天日期
- postgreSQL 获取两个时间点内每个月第一天的日期。
- Java日期循环,Java获取当月的第一天和最后一天
- JAVA获取某一天是当月第几天,获取本周第一天的日期