Hi Guys,
I was working some time ago n was in need to calculate date 30/31 days from today including Feb (Leap yr stuff). Today date is variable depending on day of execution of script. I tried searching but was not able to get exactly what I needed....So at that I time I implemented by my own which I have modified to generic so that it may helpful to you guys or somebody else like me in future...... Let me know if u find my problem with script
Code:
###############################################################################
# This Script add 30 days to current date and output next date including
# 28 or days days of February
# Author Vaibhav Gautam
##############################################################################
#!/bin/ksh
#Start validation date is today date and validation end date is +30 days
lastday=$(cal `date '+%m'` `date '+%Y'` | grep . | fmt -1 | tail -1 )
currentdate=$(date '+%d')
currentmonth=$(date '+%m')
year=$(date '+%Y')
temp=$(($lastday - $currentdate ))
echo "Date Calculation Started"
#Next date after 30 days
#Change Value 31 for 30 days
expirydate=$((30 - $temp ))
if [ $expirydate -gt 0 ]
then
nextmonth=$(($currentmonth + 1 ))
if [ $nextmonth -eq 2 ]
then
#If next month is feb then calculate last day of feb
lastday_nextmnth=$(cal 2 `date '+%Y'` | grep . | fmt -1 | tail -1 )
if [ $expirydate -gt $lastday_nextmnth ]
then
carrydate=$(($expirydate - $lastday_nextmnth))
nextmonth=$(($nextmonth + 1))
echo "Current Date $currentdate/$currentmonth/$year\" Next Date \"$carrydate/$nextmonth/$year\""
else
carrydate=$(($expirydate))
echo "Current Date $currentdate/$currentmonth/$year\" Next Date \"$carrydate/$currentmonth/$year\""
fi
else
if [ $nextmonth -gt 12 ]
then
nextmonth=1
nextyear=$(($year + 1 ))
echo "Current Date $currentdate/$currentmonth/$year\" Next Date \"$expirydate/$nextmonth/$nextyear\""
else
echo "Current Date $currentdate/$currentmonth/$year\" Next Date \"$expirydate/$nextmonth/$year\""
fi
fi
else
expirydate=$lastday
echo "Current Date $currentdate/$currentmonth/$year\" Next Date \"$expirydate/$currentmonth/$year\""
fi
Last edited by coolgoose85; 07-09-2009 at 05:51 AM..
I need a script to figure out if a user's last login was 90 days or older. OS=AIX 5.3, shell=Korn
Here's what I have so far:
====
#!/usr/bin/ksh
NOW=`lsuser -a time_last_login root | awk -F= '{ print $2 }'`
(( LAST_LOGIN_TIME = 0 ))
(( DIFF = $NOW - $LAST_LOGIN_TIME ))
lsuser -a... (3 Replies)
I am a newbie to scripting.
I need a korn shell script to copy log files of current day to archive folder and rename with current days date stamp.
I would really appreciate your help.
File structure is as follows. Everyday files get overwritten, so I need copy to a archive directory and... (3 Replies)
Hi i am writing a cron job.
so for it i need the 60 days old date form current date in variable.
Like today date is 27 jan 2011 then output value will be stote in variable in formet Nov 27.
i am using EST date, and tried lot of solution and see lot of post but it did not helpful for me. so... (3 Replies)
I am unable to get this KSH script to work. Can someone help. I've been told this should work with KSH93. Which I think I have on Solaris 10.
If I do a grep -i version /usr/dt/bin/dtksh I get
@(#)Version M-12/28/93d
@(#)Version 12/28/93
@(#)Version M-12/28/93
This is correct for... (5 Replies)
I wrote the day calculator also in bash. I would like to now, that is it good so?
#!/bin/bash
datum1=`date -d "1991/1/1" "+%s"`
datum2=`date "+%s"`
diff=$(($datum2-$datum1))
days=$(($diff/(60*60*24)))
echo $days
Thanks in advance for your help! (3 Replies)
Hi,
One of my Unix scripts needs to look for files coming in on Fridays. This script runs on Mondays. $date +"%y%m%d" will give me today's date. How can I get previous Friday's date.. can I do "today's date minus 3 days" to get Friday's date? If not, then any other way?? Name of the files is... (4 Replies)
hello,
can someone please suggest a script to rename a file that was generated today and filename that being generated daily starts with date, its a xml file.
here is example.
# find . -type f -mtime -1
./20130529_4995733057260357019.xml
#
this finename should be renamed to this format.... (6 Replies)
I am trying to get last 5 business day .
trying
for d in Mon Tue Wed Thu Fri
do
date +%Y%m%d -d "last $d"
done
gives me date
Thu Oct 20 23:56:26 EDT 2016
20161017
20161018
20161019
20161013
20161014
expected output should be
20161017
20161018
20161019
20161020 (2 Replies)
Hi Community!
Following on from this code in another thread:
#!/bin/bash
file_string=`/bin/cat date.txt | /usr/bin/awk '{print $5,$4,$7,$6,$8}'`
file_date=`/bin/date -d "$file_string"`
file_epoch=`/bin/date -d "$file_string" +%s`
now_epoch=`/bin/date +%s`
if
then
#let... (2 Replies)
Discussion started by: Greenage
2 Replies
LEARN ABOUT SUSE
time::parsedate
Time::ParseDate(3) User Contributed Perl Documentation Time::ParseDate(3)NAME
Time::ParseDate -- date parsing both relative and absolute
SYNOPSIS
use Time::ParseDate;
$seconds_since_jan1_1970 = parsedate("12/11/94 2pm", NO_RELATIVE => 1)
$seconds_since_jan1_1970 = parsedate("12/11/94 2pm", %options)
OPTIONS
Date parsing can also use options. The options are as follows:
FUZZY -> it's okay not to parse the entire date string
NOW -> the "current" time for relative times (defaults to time())
ZONE -> local timezone (defaults to $ENV{TZ})
WHOLE -> the whole input string must be parsed
GMT -> input time is assumed to be GMT, not localtime
UK -> prefer UK style dates (dd/mm over mm/dd)
DATE_REQUIRED -> do not default the date
TIME_REQUIRED -> do not default the time
NO_RELATIVE -> input time is not relative to NOW
TIMEFIRST -> try parsing time before date [not default]
PREFER_PAST -> when year or day of week is ambigueous, assume past
PREFER_FUTURE -> when year or day of week is ambigueous, assume future
SUBSECOND -> parse fraction seconds
VALIDATE -> only accept normal values for HHMMSS, YYMMDD. Otherwise
days like -1 might give the last day of the previous month.
DATE FORMATS RECOGNIZED
Absolute date formats
Dow, dd Mon yy
Dow, dd Mon yyyy
Dow, dd Mon
dd Mon yy
dd Mon yyyy
Month day{st,nd,rd,th}, year
Month day{st,nd,rd,th}
Mon dd yyyy
yyyy/mm/dd
yyyy-mm-dd (usually the best date specification syntax)
yyyy/mm
mm/dd/yy
mm/dd/yyyy
mm/yy
yy/mm (only if year > 12, or > 31 if UK)
yy/mm/dd (only if year > 12 and day < 32, or year > 31 if UK)
dd/mm/yy (only if UK, or an invalid mm/dd/yy or yy/mm/dd)
dd/mm/yyyy (only if UK, or an invalid mm/dd/yyyy)
dd/mm (only if UK, or an invalid mm/dd)
Relative date formats:
count "days"
count "weeks"
count "months"
count "years"
Dow "after next"
Dow "before last"
Dow (requires PREFER_PAST or PREFER_FUTURE)
"next" Dow
"tomorrow"
"today"
"yesterday"
"last" dow
"last week"
"now"
"now" "+" count units
"now" "-" count units
"+" count units
"-" count units
count units "ago"
Absolute time formats:
hh:mm:ss[.ddd]
hh:mm
hh:mm[AP]M
hh[AP]M
hhmmss[[AP]M]
"noon"
"midnight"
Relative time formats:
count "minutes" (count can be franctional "1.5" or "1 1/2")
count "seconds"
count "hours"
"+" count units
"+" count
"-" count units
"-" count
count units "ago"
Timezone formats:
[+-]dddd
GMT[+-]d+
[+-]dddd (TZN)
TZN
Special formats:
[ d]d/Mon/yyyy:hh:mm:ss [[+-]dddd]
yy/mm/dd.hh:mm
DESCRIPTION
This module recognizes the above date/time formats. Usually a date and a time are specified. There are numerous options for controlling
what is recognized and what is not.
The return code is always the time in seconds since January 1st, 1970 or undef if it was unable to parse the time.
If a timezone is specified it must be after the time. Year specifications can be tacked onto the end of absolute times.
If "parsedate()" is called from array context, then it will return two elements. On sucessful parses, it will return the seconds and what
remains of its input string. On unsucessful parses, it will return "undef" and an error string.
EXAMPLES
$seconds = parsedate("Mon Jan 2 04:24:27 1995");
$seconds = parsedate("Tue Apr 4 00:22:12 PDT 1995");
$seconds = parsedate("04.04.95 00:22", ZONE => PDT);
$seconds = parsedate("Jan 1 1999 11:23:34.578", SUBSECOND => 1);
$seconds = parsedate("122212 950404", ZONE => PDT, TIMEFIRST => 1);
$seconds = parsedate("+3 secs", NOW => 796978800);
$seconds = parsedate("2 months", NOW => 796720932);
$seconds = parsedate("last Tuesday");
$seconds = parsedate("Sunday before last");
($seconds, $remaining) = parsedate("today is the day");
($seconds, $error) = parsedate("today is", WHOLE=>1);
AUTHOR
David Muir Sharnoff <muir@idiom.com>.
LICENSE
Copyright (C) 1996-2006 David Muir Sharnoff. License hereby granted for anyone to use, modify or redistribute this module at their own
risk. Please feed useful changes back to muir@idiom.com.
perl v5.12.1 2006-08-15 Time::ParseDate(3)