Date and Time Manipulation
Marian Petrides
mpetrides at earthlink.net
Sat Oct 28 21:11:41 EDT 2006
Thanks!
On Oct 28, 2006, at 6:59 PM, Marielle Lange wrote:
>> While we are on the topic of dates, I've been thinking about
>> creating a "countdown" calendar, clocking the number of days
>> remaining between today's date and some future date (March 31,
>> 20010 specifically). Any tips on how I can do this? Do I have to
>> convert dates into seconds in order to subtract one from the
>> other? Thanks.
>
>
> Hi Marian,
>
> In case this helps, I wrote a minimalist countdown utility for
> christmas last year:
> http://revolution.widged.com/stacks/?category=widgets_ecards
> Christmas Countdown
>
> You will also find below various date manipulation functions. They
> were written rapidly and haven't been extensively tested. You are
> very welcome to improve them.
> That library can be found at <http://codes.widged.com/?q=node/1>,
> along with other code and libraries.
>
> Other websites with useful codes are listed at:
> <http://codes.widged.com/?q=node/660>
>
> There are some time related tutorials at So smarts Software, for
> instance (<http://www.sosmartsoftware.com/?
> r=revolution_didacticiels&l=en>)
>
> Marielle
>
>
> /* ____________________________________________________________
> |
> | Date Processing Routines
> |
> | @Author: Marielle Lange
> | @Company: Widged.com (http://widged.com)
> | @Date: 10 Apr 2006
> | @Version: 0.1
> | @Changes since last version: N/A
> | @License: Creative Commons Attribution 2.5 License
> http://creativecommons.org/licenses/by/2.5/
> | @Dependency: -
> */
>
> on DiffBetweenDates
> put field "DateFrom" into tDateFrom
> put field "DateTo" into tDateTo
> convert tDateFrom from system date to dateItems
> convert tDateTo from system date to dateItems
> put NbYearsBetweenTwoDates(tDateFrom,tDateTo) into field "NbYears"
> put NbMonthsBetweenTwoDates(tDateFrom,tDateTo) into field "NbMonths"
> put NbWeeksBetweenTwoDates(tDateFrom,tDateTo) into field "NbWeeks"
> put NbDaysBetweenTwoDates(tDateFrom,tDateTo) into field "NbDays"
> end DiffBetweenDates
>
>
> ----------------------------------------------------------------------
> -- WeekdayFirstOfMonth (function)
> --
> --
> --
> function WeekdayFirstOfMonth pYear, pMonth
> --- First of Month
> put pMonth & "/1/" & pYear into tDate
> convert tDate to dateItems
> return item 7 of tDate
> end WeekdayFirstOfMonth
>
> ----------------------------------------------------------------------
> -- NbDaysInMonth (function)
> --
> --
> --
> function NbDaysInMonth pYear, pMonth
> put (pMonth & "/1/" & pYear) into tDate
> convert tDate from date to dateItems
> put 0 into item 3 of tDate
> add 1 to item 2 of tDate
> convert tDate from dateItems to dateItems
> return (item 3 of tDate)
> end NbDaysInMonth
>
>
> ----------------------------------------------------------------------
> -- NbDaysBetweenTwoDates (function)
> --
> -- pStart and pEnd are in dateItems format
> --
> function NbDaysBetweenTwoDates pStart, pEnd
> put NbMonthsBetweenTwoDates(pStart, pEnd) into tMonthsDiff
> put (item 1 of pStart) into tStartYear
> put (item 2 of pStart) into tStartMonth
> repeat with x = 1 to tMonthsDiff
> if x = 1 then
> put tStartMonth into tMonth
> put tStartYear into tYear
> put empty into tDaysPerMonth
> -- put empty into message
> end if
> if tMonth > 12 then
> put 1 into tMonth
> add 1 to tYear
> end if
> put NbDaysInMonth(tYear,tMonth) into item x of tDaysPerMonth
> add 1 to tMonth
> end repeat
> put sum(tDaysPerMonth) into tNbDays
> return (tNbDays - (item 3 of pStart) + (item 3 of pEnd))
> end NbDaysBetweenTwoDates
>
> ----------------------------------------------------------------------
> -- NbWeeksBetweenTwoDates (function)
> --
> -- pStart and pEnd are in dateItems format
> --
> function NbWeeksBetweenTwoDates pStart, pEnd
> put NbDaysBetweenTwoDates(pStart, pEnd) into tNbDays
> return trunc(tNbDays/7)
> end NbWeeksBetweenTwoDates
>
>
> ----------------------------------------------------------------------
> -- NbMonthsBetweenTwoDates (function)
> --
> -- pStart and pEnd are in dateItems format
> --
> function NbMonthsBetweenTwoDates pStart, pEnd
> ----- Nb of Years, Months, weeks -----
> put NbYearsBetweenTwoDates(pStart, pEnd) into tNbYears
> put ((item 2 of pEnd) - (item 2 of pStart)) into tNbMonthsDiff
> ----- Handle cases were from 08/2005 to 06/2006 -----
> if tNbMonths < 0 then
> add 12 to tNbMonthsDiff
> add -1 to tNbYears
> end if
> return tNbMonthsDiff+ (12 * tNbYears) e
> end NbMonthsBetweenTwoDates
>
> ----------------------------------------------------------------------
> -- NbYearsBetweenTwoDates (function)
> --
> -- pStart and pEnd are in dateItems format
> -- Return an integer, with the number of years
> function NbYearsBetweenTwoDates pStart, pEnd
> return ((item 1 of pEnd) - (item 1 of pStart))
> end NbYearsBetweenTwoDates
>
>
> ----------------------------------------------------------------------
> -- MonthsAsArray (function)
> --
> -- Returns an Array with the Month Names, as MonthsA
> --
> function MonthsAsArray
> ----- Create an array with the Months Names -----
> put empty into MonthsA
> repeat with x = 1 to 12
> put x & "/1/00" into tDate
> convert tDate to long date
> put word 2 of tDate into MonthsA[x]
> end repeat
> return MonthsA
> end MonthsAsArray
>
> ----------------------------------------------------------------------
> -- weekNumber
> --
> --
> --
> function weekNumber pDateItems
> -- Needs the 7, because any day before may below to a week in the
> previous year
> put pDateItems into tJanuaryFirst
> put 1 into item 2 of tJanuaryFirst
> put 1 into item 3 of tJanuaryFirst
> convert tJanuaryFirst from dateitems to dateitems
> put 0 into tAdd; if item -1 of tJanuaryFirst <> 1 then put -1
> into tAdd
> return (NbWeeksBetweenTwoDates(tJanuaryFirst,pDateItems) + tAdd)
> end weekNumber
>
> ----------------------------------------------------------------------
> -- StartDateIsBeforeEndOne
> --
> -- Returns true or false, according to situation
> --
> function StartDateIsBeforeEndOne pStart, pEnd
> put true into tTest
> ----- Checking that the Start date is earlier than the End one
> -----
> If item 1 of pStart > item 1 of pEnd then
> answer "problem here, the ending year is earlier than the
> starting one"
> put false into tTest
> else if (item 1 of pStart) = (item 1 of pEnd) and (item 2 of
> pStart) > (item 2 of pEnd) then
> answer "problem here, the ending month is earlier than the
> starting one (in the same year)"
> put pStart & cr & pEnd
> put false into tTest
> else if (item 2 of pStart) = (item 2 of pEnd) and (item 3 of
> pStart) > (item 3 of pEnd) then
> answer "problem here, the ending day is earlier than the
> starting one (in the same month)"
> put false into tTest
> end if
> return tTest
> end StartDateIsBeforeEndOne
>
>
>
> _______________________________________________
> use-revolution mailing list
> use-revolution at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your
> subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-revolution
More information about the use-livecode
mailing list