Shell脚本获取格式化日期与时间总结,Linux的bash脚本对时间格式的支持超出了我的预想,支持多种格式的变化与输出。甚至比java的api还要方便,总结如下:

1、常用的取日期方法:

[plain] view plain copy

  • #!/bin/sh
  • # upload logs to hdfs
  • source /etc/profile
  • #获取昨天日期 yyyyMMdd 格式
  • yesterday=`date --date='1 days ago' +%Y%m%d`
  • #获取昨天日期 yyyy-MM-dd 格式
  • yesterday2=`date --date='1 days ago' +%Y-%m-%d`
  • #获取今天日期 yyyyMMdd 格式
  • today=`date --date='0 days ago' +%Y%m%d`
  • #获取今天日期 yyyy-MM-dd 格式
  • today2=`date --date='0 days ago' +%Y-%m-%d`
  • #获取明天日期 yyyyMMdd 格式
  • today=`date --date='1 days' +%Y%m%d`
  • #获取明天日期 yyyy-MM-dd 格式
  • today2=`date --date='1 days' +%Y-%m-%d`
  • #获取当前时间 yyyy-MM-dd HH:mm:ss 格式
  • nowtime=`date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"`
  • #获取当前日间 HH:mm:ss 格式
  • nowtime2=`date --date='0 days ago' +%H:%M:%S`
  • #获取1小时前时间 yyyy-MM-dd HH:mm:ss 格式
  • onehourage=`date --date='1 hours ago' "+%Y-%m-%d %H:%M:%S"`
  • #获取1小时后时间 yyyy-MM-dd HH:mm:ss 格式
  • onehourage2=`date --date='1 hours' "+%Y-%m-%d %H:%M:%S"`
  • #获取2小时前时间 yyyy-MM-dd HH:mm:ss 格式
  • twohourage=`date --date='2 hours ago' "+%Y-%m-%d %H:%M:%S"`
  • #获取2小时后时间 yyyy-MM-dd HH:mm:ss 格式
  • twohourage2=`date --date='2 hours' "+%Y-%m-%d %H:%M:%S"`
  • #获取1个月前时间 yyyy-MM-dd HH:mm:ss 格式
  • date --date='1 month ago' "+%Y-%m-%d %H:%M:%S"
  • #获取1个月加1天前时间 yyyy-MM-dd HH:mm:ss 格式
  • date --date='1 month ago + 1 day ago' "+%Y-%m-%d %H:%M:%S"
  • #获取1个月减1天前时间 yyyy-MM-dd HH:mm:ss 格式
  • date --date='1 month ago - 1 day ago' "+%Y-%m-%d %H:%M:%S"
  • #获取1个月加1天加1小时加1分钟加1秒钟前时间 yyyy-MM-dd HH:mm:ss 格式
  • date --date='1 month ago + 1 day ago + 1 hour ago + 1 min ago + 1 sec ago' "+%Y-%m-%d %H:%M:%S"
  • #获取1个月加1天减1小时减1分钟减1秒钟前时间 yyyy-MM-dd HH:mm:ss 格式  可以 + - 滥用
  • date --date='1 month ago + 1 day ago - 1 hour ago - 1 min ago - 1 sec ago' "+%Y-%m-%d %H:%M:%S"
  • #获取1个月加1天加1小时加1分钟加1秒钟后时间 yyyy-MM-dd HH:mm:ss 格式
  • date --date='1 month + 1 day  + 1 hour  + 1 min  + 1 sec ' "+%Y-%m-%d %H:%M:%S"
  • #获取1个月加1天减1小时减1分钟减1秒钟后时间 yyyy-MM-dd HH:mm:ss 格式
  • date --date='1 month + 1 day  - 1 hour  - 1 min  - 1 sec ' "+%Y-%m-%d %H:%M:%S"
  • #获取1年后1个月加1天减1小时减1分钟减1秒钟后时间 yyyy-MM-dd HH:mm:ss 格式
  • date --date='1 year 1 month + 1 day  - 1 hour  - 1 min  - 1 sec ' "+%Y-%m-%d %H:%M:%S"
  • #获取1年前1个月加1天减1小时减1分钟减1秒钟后时间 yyyy-MM-dd HH:mm:ss 格式
  • date --date='1 year 1 month + 1 day  - 1 hour  - 1 min  - 1 sec ' "+%Y-%m-%d %H:%M:%S"
  • 2、取月周季度的首尾

  • m= `date --date='1 month' "+%Y-%m"`-01
  • date --date="1 day ago $m" "+%Y-%m-%d"
  • #一周前 :
  • date --date="1 week ago "  "+%Y-%m-%d"
  • date --date="0 days ago" "+%Y-%m-%d %u"
  • date -d "`awk -F- '$2%3==1{print $1FS$2FS"01";next}$2%3==2{print $1FS$2-1FS"01";next}{print $1FS$2-2FS"01"}' <<<2014-1-07`" +%F
  • date -d "`awk -F- '$2%3==1{print $1FS$2+3FS"01";next}$2%3==2{print $1FS$2+2FS"01";next}{print $1FS$2+1FS"01"}' <<<2014-1-07` -1 day" +%F

  • 3、循环取日期

    [plain] view plain copy

  • #! /bin/sh
  • today=$2
  • enddate=$1
  • while [[ $today -ge $enddate  ]]
  • echo ${today}
  • today2=`date -d "0 day $today" +%Y-%m-%d`
  • echo ${today2}
  • ###  to do this
  • today=`date -d "-1 day $today" +%Y%m%d`
  • 调用方式:

    [plain] view plain copy

  • bash testFor.sh  20150507 20160225
  • 说明:to do 放需循环调用的代码或者脚本

    展开阅读全文 本来 react + vite 用得好好的,前几天看到几只前端在鼓吹 react + nextjs 合流,说什么 nextjs 也支持 spa。 就试着迁移过去,结果把自己坑得七荤八素,最后组件状态保持直接给我劝退了。 spa 是从 ssr 进化出来,但又和 ssr 完全不同的产物。一小撮前端为了实现 seo 优化,逆向退化出 nextjs。 作为远古人,我需要你们逆向退化吗?是 php 实现不了 ssr 还是 python 实现不了 ssr? 就算 nextjs 比 php 和 python 有优势(如可以和 spa 项目共享一部分界面组件库),也不能把 nextjs 吹得无所不能吧。 这个 nextjs 所谓的 react 的未来,在我看来除了 ssr 简直一无是处。