Sponsored Content
Top Forums Shell Programming and Scripting Shell Script to Loop through Quarter dates Post 303002405 by krux_rap on Wednesday 23rd of August 2017 02:29:57 PM
Old 08-23-2017
For example, if the process is run on 4-Oct-2017, then:
1) "File 1" has dates of Quarter 1 i.e. 01-Jul-2017 to 30-Sep-2017
2) What dates does "File 2" have?
We will be generating only 1 quarter file.

A few similar cases are below:

Process Date: 05-Jan-2018
File 1 : Dates of Quarter 1 i.e. 01-Jul-2017 to 30-Sep-2017
File 2 : Dates of Quarter 2 i.e. 01-Oct-2017 to 31-Dec-2017
File 3 : What dates does this have?
We will be generating only 2 quarter files. NO Jan Data

Process Date: 05-Apr-2018
File 1 : Dates of Quarter 1 i.e. 01-Jul-2017 to 30-Sep-2017
File 2 : Dates of Quarter 2 i.e. 01-Oct-2017 to 31-Dec-2017
File 3 : Dates of Quarter 3 i.e. 01-Jan-2018 to 31-Mar-2018
File 4 : What dates does this have?
3 quarters only

Also, what dates should be in the file(s) if the process is run in July of any year?
Generate All 4 quarters files. Because data is not complete yet in July. For that reason, we don't generate data for the month which we are running the script

But script will be running every month 1st week. So most of the time the previous month may not be the end of Quarter. So we have to consider following example also

For example, if the process is run on 4-Sept-2017, then:
Only One file has dates of Quarter 1 i.e. 01-Jul-2017 to 31-Aug-201


Let me know if anything is unclear and thanks for the follow-up questions

---------- Post updated at 02:29 PM ---------- Previous update was at 02:28 PM ----------

Thanks, JGT. the script is not working but i will use that as the base to cover all scenarios.

Quote:
Originally Posted by jgt
I would be inclined to create a data file rather than a lot of arithmetic.
Code:
1 20170701 20170930
2 20171001 20171231
3 20180101 20180331
4 20180401 20180630

Then you read this file for the number of quarters you are reporting. This is also way easier to modify if the company gets sold and changes its year end.

---------- Post updated 08-22-17 at 10:19 AM ---------- Previous update was 08-21-17 at 10:51 PM ----------

Code:
today=$(date +%Y%m%d)
while read quarter start end
do
if [ $start -ge $today ]
then
   exit
fi
if [ $today -gt $end ]
then
  let new_end=$today-$(date +%d)+1        #first day of month
  let new_end=$(date +%Y%m%d --date="$new_end yesterday")   #last day of previous month
fi
if [ $new_end -le $start ]
then
   exit  
else 
   end=$new_end
fi
do sql with $quarter $start $end
done <quarter_file

 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to compare the dates in shell script

Hi How to compare created or modified date of two files help needed thanks Vajiramani :) (9 Replies)
Discussion started by: vaji
9 Replies

2. Shell Programming and Scripting

Generate quarter dates with begin date and end date

Hi All, I am trying to generate quarter dates with user giving input as begin date and end date. Example: Input by user: begin_date = "2009-01-01" end_date = 2010-04-30" required output: 2009-01-01 2009-03-31 09Q01 2009-04-01 2009-06-30 09Q02 . . till 2010-01-01 2010-03-31 10Q01 ... (9 Replies)
Discussion started by: sol_nov
9 Replies

3. Shell Programming and Scripting

Difference of 2 dates in shell script

Hi., After retrieving values from DB I have two datestamps in format: 12/01/2010:05:40:00 AM and 12/01/2010:06:00:00 PM. general time format: MM/DD/YYYY:HH:MM:SS AM or PM Any quick solution to get the difference of two in the format : 1 day(s) 12:20:00 Thanks., (6 Replies)
Discussion started by: IND123
6 Replies

4. UNIX for Dummies Questions & Answers

Find Quarter Start and End Dates

Dear Members, Depending on the current date i should find out the start and end dates of the quarter. ex: Today date is 14-Nov-2011 then Quarter start date should be Oct 1 2011 and Quarter End date should be Dec 31 2011. How can i do this? Thanks Sandeep (1 Reply)
Discussion started by: sandeep_1105
1 Replies

5. Shell Programming and Scripting

append dates going forward from today to certain line in shell script

Hi there, I have a requirement to append dates going forward to a certain line in a file. I'm not sure of how to go about this. Any help will be greatly appreciated. Thanks Slyesco:wall: (2 Replies)
Discussion started by: Slyesco
2 Replies

6. Shell Programming and Scripting

Shell script to calculate difference between 2 dates

shell script to calculate difference between 2 dates (3 Replies)
Discussion started by: gredpurushottam
3 Replies

7. Shell Programming and Scripting

Need Help:Shell Script for Solaris to change the dates in a file by one week

I have to increase the date by one week in an input when script is executed in solaris. I was able to acheive this using ksh script that is working in Linux enivironment, when i execute the same script in Solaris i am getting below error: /var/tmp\n\r-> ./script.ksh date: illegal option -- d... (3 Replies)
Discussion started by: sriramanaramoju
3 Replies

8. Shell Programming and Scripting

Shell script to work on dates

Hi Sir/Madam I have a file data.txt like below file_name date_of_creation x 2/10/2012 y 8/11/2010 z 11/3/2013 a 2/10/2013 b 3/10/2013 c ... (4 Replies)
Discussion started by: kumar85shiv
4 Replies

9. Shell Programming and Scripting

Comparing dates in shell script

Hi All, I have a date variable say dt="2014-01-06 07:18:38" Now i need to use this variable to search a log and get the entries which occured after that time. (1 Reply)
Discussion started by: Girish19
1 Replies

10. 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
STRTOTIME(3)								 1							      STRTOTIME(3)

strtotime - Parse about any English textual datetime description into a Unix timestamp

SYNOPSIS
int strtotime (string $time, [int $now = time()]) DESCRIPTION
The function expects to be given a string containing an English date format and will try to parse that format into a Unix timestamp (the number of seconds since January 1 1970 00:00:00 UTC), relative to the timestamp given in $now, or the current time if $now is not supplied. Each parameter of this function uses the default time zone unless a time zone is specified in that parameter. Be careful not to use dif- ferent time zones in each parameter unless that is intended. See date_default_timezone_get(3) on the various ways to define the default time zone. PARAMETERS
o $time -A date/time string. Valid formats are explained in Date and Time Formats. o $now - The timestamp which is used as a base for the calculation of relative dates. RETURN VALUES
Returns a timestamp on success, FALSE otherwise. Previous to PHP 5.1.0, this function would return -1 on failure. ERRORS
/EXCEPTIONS Every call to a date/time function will generate a E_NOTICE if the time zone is not valid, and/or a E_STRICT or E_WARNING message if using the system settings or the $TZ environment variable. See also date_default_timezone_set(3) CHANGELOG
+--------+---------------------------------------------------+ |Version | | | | | | | Description | | | | +--------+---------------------------------------------------+ | 5.3.0 | | | | | | | Prior to PHP 5.3.0, relative time formats sup- | | | plied to the $time argument of strtotime(3) such | | | as this week, previous week, last week, and next | | | week were interpreted to mean a 7 day period rel- | | | ative to the current date/time, rather than a | | | week period of Monday through Sunday. | | | | | 5.3.0 | | | | | | | Prior to PHP 5.3.0, 24:00 was not a valid format | | | and strtotime(3) returned FALSE. | | | | | 5.2.7 | | | | | | | In PHP 5 prior to 5.2.7, requesting a given | | | occurrence of a given weekday in a month where | | | that weekday was the first day of the month would | | | incorrectly add one week to the returned time- | | | stamp. This has been corrected in 5.2.7 and later | | | versions. | | | | | 5.1.0 | | | | | | | Now returns FALSE on failure, instead of -1. | | | | | 5.1.0 | | | | | | | Now issues the E_STRICT and E_NOTICE time zone | | | errors. | | | | | 5.0.2 | | | | | | | In PHP 5 up to 5.0.2, "now" and other relative | | | times are wrongly computed from today's midnight. | | | This differs from other versions where it is cor- | | | rectly computed from current time. | | | | | 5.0.0 | | | | | | | Microseconds began to be allowed, but they are | | | ignored. | | | | +--------+---------------------------------------------------+ EXAMPLES
Example #1 A strtotime(3) example <?php echo strtotime("now"), " "; echo strtotime("10 September 2000"), " "; echo strtotime("+1 day"), " "; echo strtotime("+1 week"), " "; echo strtotime("+1 week 2 days 4 hours 2 seconds"), " "; echo strtotime("next Thursday"), " "; echo strtotime("last Monday"), " "; ?> Example #2 Checking for failure <?php $str = 'Not Good'; // previous to PHP 5.1.0 you would compare with -1, instead of false if (($timestamp = strtotime($str)) === false) { echo "The string ($str) is bogus"; } else { echo "$str == " . date('l dS of F Y h:i:s A', $timestamp); } ?> NOTES
Note If the number of the year is specified in a two digit format, the values between 00-69 are mapped to 2000-2069 and 70-99 to 1970-1999. See the notes below for possible differences on 32bit systems (possible dates might end on 2038-01-19 03:14:07). Note The valid range of a timestamp is typically from Fri, 13 Dec 1901 20:45:54 UTC to Tue, 19 Jan 2038 03:14:07 UTC. (These are the dates that correspond to the minimum and maximum values for a 32-bit signed integer.) Prior to PHP 5.1.0, not all platforms support negative timestamps, therefore your date range may be limited to no earlier than the Unix epoch. This means that e.g. dates prior to Jan 1, 1970 will not work on Windows, some Linux distributions, and a few other operating systems. For 64-bit versions of PHP, the valid range of a timestamp is effectively infinite, as 64 bits can represent approximately 293 bil- lion years in either direction. Note Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the various components: if the separator is a slash ( /), then the American m/d/y is assumed; whereas if the separator is a dash ( -) or a dot ( .), then the European d-m-y format is assumed. To avoid potential ambiguity, it's best to use ISO 8601 ( YYYY-MM-DD) dates or DateTime::createFromFormat when possible. Note Using this function for mathematical operations is not advisable. It is better to use DateTime::add and DateTime::sub in PHP 5.3 and later, or DateTime::modify in PHP 5.2. SEE ALSO
Date and Time Formats, DateTime::createFromFormat, checkdate(3), strptime(3). PHP Documentation Group STRTOTIME(3)
All times are GMT -4. The time now is 07:07 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy