Login
Latest Code Ticker for Perl.
Daily Code Email
|
|
|
| | Submitted on: 4/28/2003 4:57:37 PM
By: Jerome A. Simon
Level: Beginner User Rating: Unrated Compatibility:5.0 (all versions)
Users have accessed this article 3317 times. |
|
| | Perl is able to track the seconds since Jan 1, 1970 - so calculating the DayNumber from the seconds is real easy: Seconds / secondsPerDay. But what if you don't start with the seconds. What if what you have is a Date. How do you know what day it is? CalDayNumber() will tell you. This article has accompanying files | | | Terms of Agreement:
By using this article, you agree to the following terms...
1) You may use
this article in your own programs (and may compile it into a program and distribute it in compiled format for languages that allow it) freely and with no charge.
2) You MAY NOT redistribute this article (for example to a web site) without written permission from the original author. Failure to do so is a violation of copyright laws.
3) You may link to this article from another website, but ONLY if it is not wrapped in a frame.
4) You will abide by any additional copyright restrictions which the author may have placed in the article or article's description. | But Why? I am writing a Calendar script and I need to allow the user to enter a Date, and display weeks before and after the date. The script I wrote uses localtime() to tell me when the month/year changes as I count off the DayNumber... So, I need to know the starting DayNumber based on the users request.
# USAGE:
# DD, MM, YYYY
my $dayNumber = CalcDayNumber( 28, 3,
2003);
# -OR-
# year value from localtime()
my $dayNumber = CalcDayNumber( 28, 3,
103);
# -OR-
# DD, MM, YY
my $dayNumber = CalcDayNumber( 28, 3,
03);
# NOTE:
# Month value is 0 - 11 (not 1-12)
# These values are those used in localtime()
sub CalcDayNumber { #
$tDaY, $tMon, $tYear
my ( $tDay, $tMon, $tYear) = @_;
my $tDayNumber = 0; # Days
SINCE Jan 1, 1970
my $tCount;
# NOTE: since the seconds value tops out
# around 2034, the 100th Year
# check for leap year is NOT performed!
# ..And since every 1000 years
is a
# leap year 2000 is not effected
# ie. this routine is only valid for
# dates between 1/1/1970 - 12/31/2034
# Fix $tMon ( it might be more than 0-11)
# and adjust $tYear
until( $tMon < scalar( @daysInMonth)) {
$tMon -= scalar( @daysInMonth);
$tYear++;
}
# default is 4 digit year (2003) ... but
# allow 2 digit year ( 03)
$tYear += 100 if( $tYear < 100);
# allow 3 digit year (from localtime())
$tYear += 1900 if( $tYear < 1900);
for( $tCount = 1970; $tCount < $tYear; $tCount++) {
$tDayNumber += 365;
$tDayNumber++ unless( $tCount % 4);
}
for( $tCount = 0; $tCount < $tMon; $tCount++) {
$tDayNumber += $daysInMonth[ $tCount];
# March is effected by leap year
if( $tCount == 1) {
$tDayNumber++ unless( $tYear % 4);
}
}
$tDayNumber += $tDay;
# Returns Days since Jan 1, 1970
return( $tDayNumber - 1);
} # sub CalcDayNumber
| | Download article
Note: Due to the size or complexity of this submission, the author has submitted it as a .zip file to shorten your download time. Afterdownloading it, you will need a program like Winzip to decompress it.
Virus note:All files are scanned once-a-day by Planet Source Code for viruses,but new viruses come out every day, so no prevention program can catch 100% of them.
FOR YOUR OWN SAFETY, PLEASE: 1)Re-scan downloaded files using your personal virus checker before using it. 2)NEVER, EVER run compiled files (.exe's, .ocx's, .dll's etc.)--only run source code.
If you don't have a virus scanner, you can get one at many places on the net including:McAfee.com
| Terms of Agreement:
By using this article, you agree to the following terms...
1) You may use
this article in your own programs (and may compile it into a program and distribute it in compiled format for languages that allow it) freely and with no charge.
2) You MAY NOT redistribute this article (for example to a web site) without written permission from the original author. Failure to do so is a violation of copyright laws.
3) You may link to this article from another website, but ONLY if it is not wrapped in a frame.
4) You will abide by any additional copyright restrictions which the author may have placed in the article or article's description. | Other 3 submission(s) by this author
| | | Report Bad Submission | | | Your Vote! |
See Voting Log | | Other User Comments | There are no comments on this submission. | | Add Your Feedback! | Note:Not only will your feedback be posted, but an email will be sent to the code's author in your name.
NOTICE: The author of this article has been kind enough to share it with you. If you have a criticism, please state it politely or it will be deleted.
For feedback not related to this particular article, please click here. | | |
|