一个计算时间的脚本,又臭又长的,谁来帮忙改改阿。感觉好复杂

sh/bash/dash/ksh/zsh等Shell脚本
回复
头像
xzap
帖子: 256
注册时间: 2006-08-24 21:25

一个计算时间的脚本,又臭又长的,谁来帮忙改改阿。感觉好复杂

#1

帖子 xzap » 2010-01-02 1:15

计算我自己家小孩的出生到现在时间的时间的脚本,发现用脚本做这个好麻烦阿,有没有方便点的方法阿,大家帮忙看看,当然了,换用perl python c 什么的就没意思了。主要就是玩阿

代码: 全选

#!/bin/bash

begintime="2008-08-20 09:50:00"
nowtime="$(date '+%F %T')"
ddiff=$(($(date -d "$nowtime" +%s)-$(date -d "$begintime" +%s)))
diffyear=$(($(date -d "$nowtime" +%Y)-$(date -d "$begintime" +%Y)))
diffmonth=$(($(date -d "$nowtime" +%m|sed 's/^0//g')-$(date -d "$begintime" +%m|sed 's/^0//g')))
diffday=$(($(date -d "$nowtime" +%d|sed 's/^0//g')-$(date -d "$begintime" +%d|sed 's/^0//g')))
diffhour=$(($(date -d "$nowtime" +%H|sed 's/^0//g')-$(date -d "$begintime" +%H|sed 's/^0//g')))
diffminute=$(($(date -d "$nowtime" +%M|sed 's/^0//g')-$(date -d "$begintime" +%M|sed 's/^0//g')))
diffsecond=$(($(date -d "$nowtime" +%S|sed 's/^0//g')-$(date -d "$begintime" +%S|sed 's/^0//g')))
if [ $diffsecond -lt 0 ]
	then
	((diffminute--))
	((diffsecond = diffsecond+60))

fi
if [ $diffminute -lt 0 ]
	then
	((diffhour--))
	((diffminute = diffminute+60))

fi
if [ $diffhour -lt 0 ]
	then
	((diffday--))
	((diffhour = diffhour+24))

fi

if [ $diffday -lt 0 ]
	then
	((diffmonth--))
case  $(date -d "$begintime" +%m|sed 's/^0//g') in
1|3|5|7|8|10|12)
	((diffday = diffday+31))
;;
4|6|9|11)
	((diffday = diffday+30))
;;
2)
 if [ $(($(date -d "$nowtime" +%Y)%4)) -eq 0 ] 
	then 
	((diffday = diffday+29))
	else
	((diffday = diffday+28))
fi
	;;

esac

fi
if [ $diffmonth -lt 0 ]
	then
	((diffyear--))
	((diffmonth = diffmonth+12))

fi

allmonth=$((diffyear*12+diffmonth))
allday=$(($(($ddiff/(3600*24)))))
allhour=$(($(($ddiff%(3600*24)))/3600))
allminute=$(($(($ddiff%3600))/60))
allsecond=$(($(($ddiff%3600))%60))

echo "宝贝现在已经 $allday天 $allhour小时 $allminute分 $allsecond秒"
echo "第 $allmonth个月 $diffday天 $diffhour小时 $diffminute分 $diffsecond秒"
echo  "$diffyear年 $diffmonth个月 $diffday天 $diffhour小时 $diffminute分 $diffsecond秒"


头像
xhy
帖子: 3916
注册时间: 2005-12-28 1:16
系统: Ubuntu 12.10 X64
来自: 火星

Re: 一个计算时间的脚本,又臭又长的,谁来帮忙改改阿。感觉好复杂

#2

帖子 xhy » 2010-01-02 1:31

linux是 哪个合适用哪个,哪个方便用哪个,不会为了用xx而用xx
非要放着perl/python选用不太适合做这个事情的shell,违背Linux哲学
目前负债150多万
头像
xzap
帖子: 256
注册时间: 2006-08-24 21:25

Re: 一个计算时间的脚本,又臭又长的,谁来帮忙改改阿。感觉好复杂

#3

帖子 xzap » 2010-01-02 4:01

额,受教了。
linux哲学,好高深的话题阿。 :em02

不过我就是玩而已阿。又不是做什么项目。玩而已阿,哲学扯的好像有点远
头像
hecha
帖子: 364
注册时间: 2007-09-23 13:36

Re: 一个计算时间的脚本,又臭又长的,谁来帮忙改改阿。感觉好复杂

#4

帖子 hecha » 2010-01-02 18:39

我也写一个

代码: 全选

#!/bin/bash

born=`date -d "2012-12-21 08:00:00" +%s`
now=`date +%s`

let age=$now-$born

echo $age 秒
let sec=$age%60
let age=$age/60

echo $age 分钟
let min=$age%60
let age=$age/60

echo $age 小时
let hour=$age%24
let age=$age/24

echo $age 天
let day=$age%365
let year=$age/365
echo $year 年 $day 天 $hour 小时 $min 分钟 $sec 秒
头像
xzap
帖子: 256
注册时间: 2006-08-24 21:25

Re: 一个计算时间的脚本,又臭又长的,谁来帮忙改改阿。感觉好复杂

#5

帖子 xzap » 2010-01-02 19:20

楼上的还是换汤不换药阿,而且还有一个很重要的错误。那就是闰年的问题
所以应该再加个判断,而且还有月份的计算才是最烦的,所以。如果要完善到没有错误的话,代码还是会很长阿

有没有vbs那样可以控制月份的方法,像我写的vbs脚本,简单点好像

代码: 全选

xx=formatdatetime(now())

yy=formatdatetime("2008/8/20 9:50")

zz="宝贝已经 "&DateDiff("d", yy, now)&" 天了!!"

y=DateDiff("yyyy", yy, now)

m=DateDiff("m", yy, now)

t1=DateAdd("m", m, yy)

t4=now

t1=FormatDateTime(t1,1)

t4=FormatDateTime(t4,1)

if t1 > t4 then

t2=DateDiff("d", now, t1)

t3="宝贝现在:"&m&"个月差"&t2&"天   "

elseif t1 < t4 then

t2=DateDiff("d", t1, now) 

t3="宝贝现在:"&m&"个月多"&t2&"天   "

else

t3="宝贝今天"&m&"个月了!!"



end if

msgbox zz,,t3
继续等高手
头像
hecha
帖子: 364
注册时间: 2007-09-23 13:36

Re: 一个计算时间的脚本,又臭又长的,谁来帮忙改改阿。感觉好复杂

#6

帖子 hecha » 2010-01-02 19:39

算年龄的话计算闰年没什么意义啊, 我是觉得直接当 365 算更合适
t3swing
帖子: 1028
注册时间: 2008-11-01 21:42
来自: 树下板凳

Re: 一个计算时间的脚本,又臭又长的,谁来帮忙改改阿。感觉好复杂

#7

帖子 t3swing » 2010-01-02 19:58

小朋友头像好久没更新了哈
这个搞这么精确干嘛
民族的脊梁,是踏实做事的人,非只知道骂街的泼妇。
头像
c\nc
帖子: 231
注册时间: 2007-12-25 12:51

Re: 一个计算时间的脚本,又臭又长的,谁来帮忙改改阿。感觉好复杂

#8

帖子 c\nc » 2010-01-03 5:16

格式化成1970-01-01之后的秒数,然后做减法 :em04
回复