Sponsored Content
Full Discussion: Calculate given date - 1 day
Top Forums Shell Programming and Scripting Calculate given date - 1 day Post 302930321 by rbatte1 on Friday 2nd of January 2015 07:46:29 AM
Old 01-02-2015
If you don't have GNU date, then another alternative is perl if you have that. From your input date, we need to split it up the values and feed them in:-
Code:
#!/bin/ksh

input_date=$1

in_yyyy="${input_date%????}"     # Remove last four characters
in_dd="${input_date#??????}"     # Remove lead four characters
in_mm="${input_date#????}"       # Remove lead four characters
in_mm="${in_mm%??}"              # Remove last two characters from previously split value

((temp_mm=$in_mm-1))             # Reduce month by one as epoch counts from 1/1/1970 as zero

# Get time in seconds since epoch
perl -e "use Time::Local; print timelocal(0,0,0,$in_dd,$temp_mm,$in_yyyy), ;" | read in_seconds

# Go back one day in seconds
((out_seconds=$in_seconds-86400))

# Display answer in required format
perl -e 'use POSIX qw(strftime);print scalar(strftime "%Y%m%d", localtime $ARGV[0]), "\n";' $out_seconds

I hope that this meets the brief you have given us. There may be smarter ways to read & split the input date, so I'm open to suggestions.

Obviously some validity checking on the input would be wise else you will get various horrible messages from the perl

I've put it in a script called 254222 (thread number) and tested it as shown:-
Code:
$ 254222 20141220
20141219

$ 254222 20140301
20140228

$ 254222 20160301
20160229

$


I hope that this helps. I had fun with the challenge and I'm pretty sure I'm going to need it soon myself too, so thanks for the query Smilie


Robin
This User Gave Thanks to rbatte1 For This Post:
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Cron to run first day of month to calculate date 3 months ago

Hi, I would like to find out how can i calculate a date which is 3 months ago. I intend to run a cron job on the 1st of every month, and calculate the month 4 months earlier from the date. For example, if today's date is 1st May 2007, i would like to return 012007( January 2007). i can get... (1 Reply)
Discussion started by: new2ss
1 Replies

2. Shell Programming and Scripting

calculate the date of next satureday of current date.

I want to calculate the date of next satureday of current date using shell script. Suppose, today is 27-feb-08 I want to get the date of next satureday, which means 01-mar-08, in the formate '' YYMMDD ". I do this in ksh.. Please tell me any type of command which help me out. Thanks in... (3 Replies)
Discussion started by: rinku
3 Replies

3. Shell Programming and Scripting

how to obtain date and day of the week from `date` command

Hi, does anybody know how to format `date` command correctly to return the day of the week? Thanks -A I work in ksh.... (1 Reply)
Discussion started by: aoussenko
1 Replies

4. Shell Programming and Scripting

finding the previous day date and creating a file with date

Hi guys, I had a scenario... 1. I had to get the previous days date in yyyymmdd format 2. i had to create a file with Date inthe format yyyymmdd.txt format both are different thanks guys in advance.. (4 Replies)
Discussion started by: apple2685
4 Replies

5. UNIX for Dummies Questions & Answers

Calculate the day after bash

Hello I would like to help me create a script that: Given a date, more precisely a year, one month and one day. must calculate the day after -Input: Year, Month, Day -Output: Next day the Year-Month-Day thanks (9 Replies)
Discussion started by: karkov
9 Replies

6. Shell Programming and Scripting

KSH script Not working (calculate days since 1/1/2000 given day 4444)

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)
Discussion started by: thibodc
5 Replies

7. AIX

Need to get the next day's date of the user entered date

I need to get the next day's date of the user entered date for example: Enter date (yyyy/mm/yy): 2013/10/08I need to get the next day's date of the user entered date Desired Output: 2013/10/09Though there are ways to achieve this is Linux or Unix environment (date command) ,I need to... (1 Reply)
Discussion started by: rpm120
1 Replies

8. Shell Programming and Scripting

Calculate Julian date of a given date

How to get Julian date (Three digit) of a given date (Not current date)? I do not have root privilege - so can not use date -d. Assume that we have three variables year, month and date. Thx (5 Replies)
Discussion started by: Soham
5 Replies

9. Linux

How to calculate the quarter end date according to the current date in shell script?

Hi, My question is how to calculate the quarter end date according to the current date in shell script? (2 Replies)
Discussion started by: Divya_1234
2 Replies

10. UNIX for Beginners Questions & Answers

Replace date in file every day with current date

I Have text like XXX_20190908.csv.gz need to replace Only date in this format with current date every day Thanks! (1 Reply)
Discussion started by: yamasani1991
1 Replies
Data::Faker::DateTime(3pm)				User Contributed Perl Documentation				Data::Faker::DateTime(3pm)

NAME
Data::Faker::DateTime - Data::Faker plugin SYNOPSIS AND USAGE
See Data::Faker DATA PROVIDERS
unixtime Return a unix time (seconds since the epoch) for a random time between the epoch and now. date Return a random date as a string, using a random date format (see date_format). time Return a random time as a string, using a random time format (see time_format). rfc822 Return an RFC 822 formatted random date. This method may not work on systems using a non-GNU strftime implementation (kindly let me know if that is the case.) ampm Returns am or pm randomly (in the current locale) using one of the formats specified in ampm_format. time_format Return a random time format. date_format Return a random date format. ampm_format Return a random am/pm format. datetime_format Return a random date and time format. month Return a random month name, unabbreviated, in the current locale. month_abbr Return a random month name, abbreviated, in the current locale. weekday Return a random weekday name, unabbreviated, in the current locale. weekday_abbr Return a random weekday name, abbreviated, in the current locale. sqldate Return a random date in the ISO8601 format commonly used by SQL servers (YYYY-MM-DD). datetime_locale Return a datetime string in the preferred date representation for the current locale, for a random date. date_locale Return a date string in the preferred date representation for the current locale, for a random date. time_locale Return a time string in the preferred date representation for the current locale, for a random date. century Return a random century number. dayofmonth Return a random day of the month. UTILITY METHODS
Data::Faker::DateTime::timestr($format); Given a strftime format specifier, this method passes it through to POSIX::strftime along with a random date to display in that format. Perl passes this through to the strftime function of your system library, so it is possible that some of the formatting tokens used here will not work on your system. NOTES AND CAVEATS
Be careful build timestamps from pieces Be very careful about building date/time representations in formats that are not already listed here. For example if you wanted to get a date that consists of just the month and day, you should NOT do this: my $faker = Data::Faker->new(); print join(' ',$faker->month,$faker->dayofmonth)." "; This is bad because you might end up with 'February 31' for example. Instead you should use the timestr utility function to provide you a formatted time for a valid date, or better still, write a plugin function that does it: my $faker = Data::Faker->new(); print $faker->my_short_date()." "; package Data::Faker::MyExtras; use base qw(Data::Faker); use Data::Faker::DateTime; __PACKAGE__->register_plugin( my_short_date => sub { Data::Faker::DateTime::timestr('%M %e') }, ); POSIX::strftime See the documentation above regarding the timestr utility method for some caveats related to strftime and your system library. SEE ALSO
Data::Faker AUTHOR
Jason Kohles, <email@jasonkohles.com> COPYRIGHT AND LICENSE
Copyright 2004-2005 by Jason Kohles This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. perl v5.10.1 2005-07-14 Data::Faker::DateTime(3pm)
All times are GMT -4. The time now is 06:17 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy