# Patent

## Title
Methods and apparatuses to determine dynamic dates

## Abstract

A method, apparatus, and system in which a resultant date is modified based upon the date-effecting condition. A date input is received as an expression having one or more components and other parameters that modify the value of a particular component. The expression establishes and manipulates a target date in order to determine a resultant date. A determination is made if a date-effecting condition is associated with the expression. The resultant date is modified based upon the date-effecting condition.

## Background
NOTICE OF COPYRIGHT
A portion of the disclosure of this patent document contains material that is subject to copyright protection. The copyright owner has no objection to the facsimile reproduction by anyone of the software engine and its modules, as it appears in the Patent and Trademark Office Patent file or records, but otherwise reserves all copyright rights whatsoever.
FIELD OF THE INVENTION
Embodiments of the invention generally relates to software applications that are date driven. More particularly an embodiment of this invention relates to establishing a resultant date based upon an expression as the date input.
BACKGROUND OF THE INVENTION
Typically, software development is date driven or date related. Reporting tools, event scheduling applications, etc., all do something based on a date or date range. For example, if you wanted a reporting tool to generate a report automatically on the 2nd MONDAY following the end of each payroll period, a user or programmer typically manually specifies each of those dates far into the future.
Some date driven programs only accept a constant date value for a date input, such as 12/23/2002. The date 12/23/2002 only occurs once in history and always represents December twenty-third two thousand and two. The value represented by that constant date in date input doesn't change based upon other factors. Thus, these programs are very limited in the types of actions they may perform without the addition of a lot of manual programming each time the fixed date value needs to be altered.
Typically, date driven programs lack the intelligence to alter the value represented by a date due to the existence of condition. For example, some scheduling programs allow a user to program a reoccurring date. Typically, some of the scheduling programs allow an action, such as generating paychecks, to be connected to that reoccurring date. However, in general, if one of the reoccurring dates occurs on a date that also happens to be a holiday, then these scheduling programs lack the intelligence to automatically alter the value represented by that occurrence of the reoccurring date due to the existence of the holiday condition.
SUMMARY OF THE INVENTION
A method, apparatus, and system in which a method modifies a resultant date based upon the date-effecting condition. A date input is received as an expression having one or more components and other parameters that modify the value of a particular component. The expression establishes and manipulates a target date in order to determine a resultant date. A determination is made if a date-effecting condition is associated with the expression. The resultant date may be compared to the date-effecting condition and subsequently modified based upon that comparison.



BRIEF DESCRIPTION OF THE DRAWINGS
The drawings refer to the invention in which:
FIG. 1 illustrates a block diagram of an embodiment of a software engine having a date input and date-effecting condition input to determine a resultant date;
FIG. 2 illustrates a flow diagram of an exemplary creation and decoding of an expression giving a date input; and
FIG. 3 illustrates an exemplary expression having one or more components and corresponding parameters to modify the value of a particular component;
FIG. 4 illustrates an exemplary expression having a target date component and parameters that modify the value of the target date component;
FIGS. 5a and 5b illustrate an exemplary flow diagram to establish a resultant date based upon an expression having one or more components and corresponding parameters that modify the value of the components and then taking an action based upon the resultant date; and
FIG. 6 illustrates a block diagram of an exemplary computer system that may use an embodiment of a machine-readable medium that provides instructions, which when executed by a machine, cause the machine to perform operations based upon a resultant date.



While the invention is subject to various modifications and alternative forms, specific embodiments thereof have been shown by way of example in the drawings and will herein be described in detail. The invention should be understood to not be limited to the particular forms disclosed, but on the contrary, the intention is to cover all modifications, equivalents, and alternatives falling within the spirit and scope of the invention.
DETAILED DISCUSSION
In the following description, numerous specific details are set forth, such as examples of specific expressions, named components, connections, types of parameters, etc., in order to provide a thorough understanding of the present invention. It will be apparent, however, to one of ordinary skill in the art that the present invention may be practiced without these specific details. In other instances, well known components or methods have not been described in detail but rather in a block diagram in order to avoid unnecessarily obscuring the present invention. The specific details may be varied from and still be contemplated to be within the spirit and scope of the present invention. The term coupled is defined as meaning connected either directly or indirectly.
In general, a method, apparatus, and system are described in which a resultant date is modified based upon a date-effecting condition. A date input is received as an expression having one or more components and other parameters that modify the value of a particular component. The expression establishes and manipulates a target date in order to determine a resultant date. A determination is made if a date-effecting condition is associated with the expression. The resultant date is compared against the date-effecting condition. After the comparison, if the date-effecting condition is found to be satisfied then modifying the resultant date by compounding that date with another expression. Other features and advantages of embodiments of the invention will be apparent from the accompanying drawings and from the detailed description that follows below.
FIG. 1 illustrates a block diagram of an embodiment of a software engine having a date input and date-effecting condition input to determine a resultant date. In an embodiment the software engine 100 may include the date input 102, the date-effecting condition input 104, an intelligence layer 106, a logic block 108, and a database 110. The date input 102 receives an expression having one or more components and other parameters that modify the value of a particular component. The expression in the date input 102 establishes and manipulates a target date in order to determine a resultant date. The date-effecting condition input 104 may contain one or more date-effecting conditions associated with the expression. The intelligence layer 106 examines the content in the date input 102 and the date-effecting condition input 104. The intelligence layer 106 references the logic block 108 to resolve the expression and any date-effecting conditions in order to generate a resultant date 114. The logic block 108 breaks up the expression into its component parts and other parameters that modify the value of a corresponding component. The logic block 108 and intelligence layer 106 reference the database 112 for algorithms and data to decode and solve the expression. An exemplary expression may have target date component 120, a primary component 122, a segmenting component 124, and an offset component 126. Another exemplary expression may only have a target date component 120. Each component may have an associated parameter, such as an identifier 128-136, to modify the value of that component.
The expression given as a date input may have a relative date value or a constant date value. If the software engine 100 determines that the expression has a relative date value, for example Easter, then the intelligence layer 106 decodes the expression to establish a target date as a starting point and uses the corresponding parameters to modify the target date determine a resultant date 114. If the intelligence layer 106 determines that the expression has constant date value, for example 12/23/2002, then the constant date value becomes the resultant date 114. The intelligence layer 106 also determines if one or more date-effecting conditions are associated with the expression. If so, the intelligence layer 106 may reference the database 110 to resolve the date effecting conditions. The intelligence layer compares the resultant date against the date effecting condition. After the comparison, then the resultant date can be compounded with another expression to return a modified resultant date. The intelligence layer 106 may then also use the potentially modified resultant date for further actions, such as comparing this resultant date with another date, retrieving information associated with the modified resultant date, etc. Also, the software engine 100 may store or supply the potentially modified resultant date to any date driven program such as a scheduling program or a reporting tool.
As described later, an expression having a constant date value is limited to a specific numeric date in history, such as 12/14/2002. A relative date value is one in which the value represented by that relative date given as the date input does change based upon other factors. An expression having a relative date value, may be variable numeric values or date varying words such as Sunday, Memorial Day, first Wednesday in March, etc. The expression having a relative date value changes the resultant date based upon the modifications made to the target date by parameters acting upon the target date.
The database 110 contains parameters a predefined date effecting conditions 136 and operators used in a date-effecting comparison such relational operators 138, mathematical operators 144, Boolean operators 140, pattern/string operators 142, and other similar operators. The database 110 may also store defined variables such as date implicating words, “Today,” Named Days of the week, “Leap Day,” Holidays, phrases such as “The first Sunday of the month,” etc. The database 110 may also store defined date implicating word occurrences and intervals such as shift workweek, pay period, etc.
A user interface may exist to allow a user to supply a date input an expression. The user interface may have multiple screens to encompass the content to be supplied with or associated with the expression. One exemplary screen may have data entry fields such as start date, a recurrence pattern, etc. A user may also type the expression directly into the date input. Similarly, a protocol can be used to have the software engine 100 cooperate with another software program in order to receive the date input as an expression.
In an embodiment, the components in an expression may be comprised of constants, variables, and symbols, which are all interpreted by the intelligence layer 106 and logic block 108 to lead to a resultant date 114. For example, the expression containing constants and variables may be expressed as “schedule a meeting for the first Monday of every month” as well alternatively expressed in another form adding symbols “Schedule meeting (##/01/####)Monday(+1).”
FIG. 2 illustrates a flow diagram of an exemplary process for creation and decoding of an expression given as a date input.
In block 202, the software engine allows the creation of a date input as an expression whose decoding generates a resultant date based upon other date information.
In block 204, a user, manually enters or via a user interface, constructs the expression from one or more components and corresponding identifiers/parameters to modify the value of the components. The engine then receives the date input as an expression.
In blocks 206a, 206b, and 206c, the software engine decodes the expression to establish a target date. Each component may have a combination of a constant value, a variable value, or operator/symbol identified with that component. At least one of the components is an actual or assumed target date to be used as a starting point.
In block 208, the establishment and manipulation of the target date determines a specific resultant date. If the expression has a relative date value then the resultant date is based upon the one or more components and corresponding parameters that modify the value of the components in the expression. If the expression has a constant date value, then only one date can be returned. Thus, the resultant date is the same as the constant date value.
FIG. 3 illustrates an exemplary expression having one or more components and corresponding parameters to modify the value of a particular component. One or more components compose expressions. Each component has a specific effect in how a date's resultant value is evaluated. The exemplary expression has four types of components: a target date component 320, a primary component 322, a segmenting component 324, and an offset component 326. Components 322-326 in an expression other than the target component 320 act as parameters to modify the value of the target date. The corresponding identifiers contained in each component define constant values, variable values, or functions to be performed. However, the components 320-326 do not need to have an assigned value. For example, the expression may be as simple as “Today.” The intelligence layer refers to logic block to decode the target date of the word, “Today.” The intelligence layer references the defined variable block in the database to decode that the word “Today” has a default value of whatever the current date is at the time when the intelligence layer resolves the expression.
As noted above, the Target Date component 320 may have an assigned or an assumed value. Targets are the initial values, supplied by the system or the user, to be used as starting points of resultant dates. Targets are generally provided, but are not always required for use.
The target date is the actual date the system uses to start its interpretation of an expression. The intelligence layer interprets the target date component 320 as a segment of time having units of time i.e. months, a range of time (e.g., the month of February) and then defining the segmenting interval (e.g., Sundays). If the given target date was “the second Sunday of the month of February” then the intelligence layer can now traverse the month of February by stepping through the Sunday segments. If the target date was modified by the parameter (+1) “*(the second Sunday of the month of February) (+1)”, in our example, then the intelligence layer starts at the target date and then traverses to the next Sunday to generate a resultant date.
In an embodiment, in cases where the target date is not specified “TODAY” is the assumed parameter. The assumed parameter “(TODAY)” is defined and stored in the database. The intelligence layer references the database and interprets the word “TODAY” as “redefine the Target Date as the numeric value associated with the current date.
No redefining of the Target Date is necessary when using a constant date as the primary component 322 because the intelligence layer returns just the constant date Identifier. For example: *(01/01/2001)12/25/2001 returns a resultant date of 12/25/2001. The intelligence layer decodes the expression to mean find the nearest occurrence of the date 12/25/2001 nearest to the Target Date 01/01/2001. Since there is only one 12/25/2001 is history, it does not matter what the Target Date is, the intelligence layer returns the only one date available, 12/25/2001.
The primary component 322 can be another date input to reference the target date against. The offset component 324 may be used to set off a previous component's date value by a fixed amount. The segmenting component 326 may be used to explicitly segment time based on the given parameters and the date returned by the preceding components in the expression.
The logic block may be programmed to also decode three types of identifiers used with the components, Constants, Variables, and Symbols. Constants such as 12/23/2000 always represent the same value. Variable can have different values based upon differing conditions. Symbols are non-numeric elements that convey when and how to use a component.
FIG. 4 illustrates an exemplary expression having a target date component and parameters that modify the value of the target date component. This exemplary expression contains four types of components: a target date component 420, a primary component 422, a segmenting component 424, and an offset component 426. The exemplary expression 400 having a relative date value is “*(12/23/2000)SUNDAY(−1) ^(01/01/1990,28 days,−1)+1month.”
The value of the exemplary target date component 420 is *(12/23/2000) and thus the starting point.
As noted, the primary component 422 can be another date input to reference the target date against. In this example, Sunday may be the primary component 422 in the expression “*(12/23/2000)SUNDAY(−1)” and (−1) may be an Occurrence parameter modifying the primary component 422. The Occurrence parameter determines which “occurrence” of the named Identifier will be returned. The Occurrence parameter evaluates a positive or negative number, such as “−1”. When used, the (−1) means: “the first on or before.” Similarly, the plus symbol “+” may signify “on or after.” Where the “1” in the parameter signified “the first” occurrence, the system can also use any numeric value to signify the nth occurrence of the named Identifier. Thus, the intelligence layer decodes the expression “*(12/23/2000)SUNDAY(−1)” as a target date of 12-23-2000 modified by the first Sunday on or before that date, 12/23/2000.
As noted, the Offset component 426 may be used to adjust the previous component's date value by a fixed amount. The Offset component 426 uses the Symbol Identifiers of “+” or “−”, a constant numerical value (e.g., 1, 7, 31), and follows with a measurement of time (e.g., years, months, weeks, days, hours, minutes, and seconds). Thus, the intelligence layer decodes the expression “*(12/23/2000)SUNDAY(−1)+1month” to add one month to the previous components date value to generate a resultant date. In this example, the corresponding resultant date is the first Sunday on or before the target date of 12-23-2000 modified by adding one month that Sunday's date. i.e. a resultant date occurring in January 2001.
Referring to FIG. 1, the database 110 maintains defined variables such as the word “Sunday” as well as the current numeric date and time in order to supply this information to the logic block 108. The logic block 108 then decodes the expression and the intelligence layer 106 resolves the expression.
Referring to FIG. 4, the segmenting component 424 is used to explicitly segment time based on the given parameters and the date returned by the preceding components. The segmenting component 424 may be characterized by the use of the “^” Symbol Identifier and accepts three parameters. The first parameter defines the date from which segmenting will be based on or started. The second parameter is the interval parameter. The third is an Occurrence parameter. Finally, the date returned by the component previous to the segmenting component is used as the reference (starting point) in the time segment. Thus, the segmenting component may be represented as, “COMPONENT (Reference Date)}^(Start Date( ), Interval, Occurrence).”
In other words, the segmenting component uses the date returned by its first parameter to define a starting period. The segmenting component 424 then segments time into intervals defined in its second parameter, and then returns the nth Occurrence (based on the Occurrence parameter) from the date returned by the previous component (the component just left of the segmenting component 424).
In this example, the previous components have determined a reference date of the first Sunday on or before the target date of 12-23-2000. The logic block decodes the exemplary segmenting component, 01/01/2001,3 months,1, to mean starting on the 1st of Jan., 2001 (1st parameter), segment time every 3 months (2nd parameter) and return the first occurrence (3rd parameter) of one of these time segments that occurs after the reference date (date returned by previous component). Thus, the resultant date time segment returned is 01/01/2001 to 03/31/2001.
As can be seen for the above exemplary expression, a date input given as an expression having a relative date value to the software engine may be very complex indeed. However, an expression having a relative date value may contain, for example, a primary component and an assumed target date. For example, the expression having a relative date value of Sunday(−1) would yield the resultant date of the nearest Sunday on or before Today's date.
Referring to FIG. 3, several types of identifiers may be used with the components such as Constants, Variables, and Symbols. Constants, Variables, and Symbols may also be used in the parameter section of a component.
Constants such as constant dates or constant numeric values are values that represent exactly the same value irrespective of anything else. The term 02/29/1972 is a constant date and always represents the same day in history. The format for constant dates is the standard U.S. format of {Month}/{Day}){Year} written as MM/DD/YYYY. The constant numeric value of 2 always represents two.
The logic block is programmed to interpret the use of a constant date in the primary component 322 or in the target date component 320 without any other modifying components to return the constant date entered. For example: if a user enters 02/29/1972 as the target date by itself or as the primary component 322, the return value is 02/29/1972. This method of entering constant dates is useful when specific dates must be targeted. The entry of 12/25/2001 might be necessary to target Christmas 2001.
Variables are values that represent different values depending upon what other information that variable is being compared with. For example, Sunday is a variable value. The use of wildcard variables in an expression in place of constant Identifiers is an effective method for identifying recurring events. Wildcards provide the user the ability to create one Identifier that will return a date, or time, relevant to the Target Date. The logic block is programmed to substitute the wildcard symbols with the TARGET day's respective values. For example, the target date component 320 may be 12/09/2002 and the primary component 322 may be ##/01#### and the # symbol is a wildcard. The resultant date is 12/01/2002. The logic block substitutes the target dates values for in the wildcard positions to generate the resultant date. Note, the last example, ##/01/##, is an easy method for identifying the first day of the “TARGET” month since the first day of every month is the always represented by 01.
Similarly, the period (.) symbols work much the same as the pound symbols with one main difference: they always return the last possible numeric value for the position that they occupy within the date or time Identifier. That is, the logic block is programmed for the period symbols return the last day of the month when used in the day place, the last month of the year (12) when used in the month place, and the last year available to the system when used in the year place, etc. For time, the period symbol returns 23 in the hour place and 59 when used in the minute or second place.
Once a resultant date is determined, then the intelligence layer may derive information from comparing the resultant date to other information. Further, the software engine may cooperate with software that is date driven such as a scheduling program, a reporting tool that retrieves information based upon the date input, or another software program that describes information as it relates to a date.
Further, the expression may have one or more date-effecting conditions associated with the expression. For example, “schedule a meeting for the first Monday of every month but not if that first Monday is a holiday.” The intelligence layer decodes the date portion of the expression as well as the condition associated with the expression. The first portion of the expression “schedule a meeting for the first Monday of every month is a function of the resolving the date portion of the expression. The second portion of the expression, “but not if that first Monday is a holiday,” is a date effecting condition applied to the expression. The intelligence layer makes a comparison to see if the resultant first Monday falls on a holiday. If so, the condition is satisfied. Date effecting conditions may be supplied by the user or stored in the database. Date effecting conditions may be conditions or rules that the resultant date is compared to and when compounded with another expression automatically change the resultant date. Similarly, a date effecting condition can block an action from being taken if the date effecting condition is not satisfied.
Another portion of the expression may be added, for example “In the case of a holiday on the first Monday schedule the meeting for the next day,” to compound two expressions. In the compounding of the two expressions, the target date of the second condition is the resultant date of the first expression and modifies the resultant date if the date effecting condition is true.
A date effecting condition may be a comparison using operators such as Boolean operators, mathematical operators, relational operators, defined conditions, pattern operators, or string operators, which if found to be satisfied then modify the resultant date. Actions such as deriving information, retrieving information, etc. may then be taken based upon the modified resultant date.
For another example of a date-effecting condition associated with an expression, in the expression TODAY=LEAPDAY, the intelligence layer decodes the expression and condition to asks the question is Today a Leap day. The intelligence layer returns a True only if in fact the equation is evaluated on the 29th of February.
In the above example, the “=” symbol is used to compare Today's date and the nearest calendar leap day. This symbol is called a relational operator. As noted above, the intelligence layer may decode many different types of operators when resolving an equation.
Referring to FIG. 1, the following list some examples of relational operators 138 stored in the database 110.
















Example's


Relational


Return


Operators
Description
Example
Value







<
Used to compare one
01/01/2001<01/31/2001
TRUE



Identifier to another.



Returns TRUE if the



Identifier on the left is



LESS THAN the



Identifier on the right.




SUNDAY<SUNDAY
FALSE


>
Used to compare one
01/01/2001>01/31/2001
FALSE



Identifier to another.



Returns TRUE if the



Identifier on the left is



GREATER THAN the



Identifier on the right.




SUNDAY>SUNDAY
FALSE


<=
Used to compare one
01/01/2001<=06/15/1999
FALSE



Identifier to another.



Returns TRUE if the



Identifier on the left is



LESS THAN OR



EQUAL TO the



Identifier on the right.




SUNDAY<=SUNDAY
TRUE


>=
Used to compare one
01/01/2001>=06/15/1999
TRUE



Identifier to another.



Returns TRUE if the



Identifier on the left is



GREATER THAN OR



EQUAL TO the



Identifier on the right.




SUNDAY>=SUNDAY
TRUE


=
Used to compare one
01/01/2001=021/02/2001
TRUE



Identifier to another.



Returns TRUE if the



two Identifiers are



EQUAL.




TRUE = FALSE
FALSE


<>
Used to compare one
SUNDAY <> FRIDAY
TRUE



Identifier to another.



Returns TRUE if the



two Identifiers are



NOT EQUAL.




FALSE <> FALSE
FALSE









The following list some examples of defined variables 136 stored in the database 110. Some defined variables are words that explicitly or implicitly convey date information. The words may be commonly used date implying words or very application specific date imply words. Defined variables may also be variables that are defined other than words such as symbols, etc.
The DAY Identifier returns the day of the month of the target day. *(TARGET)DAY returns the calendar day of the month for the target day.
The DAYOFWEEK Identifier returns a numerical value that reflects the day of the week for the target day. For this Identifier, numbering starts on Sunday (1) and ends on Saturday (7). For example, “*(07/04/1776)DAYOFWEEK” returns that the original Independence Day was a Thursday, the 5th day of the week.
The SHIFTDURATION Identifier returns the number of hours included in the target shift. For example, SHIFTDURATION returns a value of 8, assuming that the target shift is eight hours long.
An ALIAS Identifier represents a predefined expression under an alias. The Alias stores the predefined expression in the database with a more user-friendly name. For example, the numeric segmenting component, “^01/01/####,3 months,1,” which yields the resultant date segment of the first three months of whatever the target date's year is may be substituted in an expression under an Alias as the words “first quarter.”
The SPECIALDAYS Identifier asks the question: “Is the target day a specified special day?” This Identifier accepts a numerical parameter specifying the special day. The Identifier returns TRUE if the target day is the special day and FALSE if it is not.
The SHIFTWORKING Identifier asks the question: “Is the identified shift a working shift?” This Identifier accepts a numerical parameter specifying the shift group. The Identifier returns TRUE if the identified shift is a working shift, of the specified group, and FALSE if it is not.
The PAYROLLSTART Identifier returns the date that the target day's payroll period began (forward or back, depending on the parameter).
The PAYROLLEND Identifier returns the date the target day's payroll period ends (forward or back, depending on the parameter).
For employees that fall under the Fair Labor Standards Act(FLSA), the FLSASTART Identifier returns the date the target day's FLSA period ends (forward or back, depending on the parameter).
The SHIFTPATTERNDAY Identifier returns the most recent shift day for the given target shift (forward or back, depending on the parameter).
The following list some examples of mathematical operators 144 stored in the database 110. Math operators such as multiply divide, truncate, round, etc.
The database 110 may store Boolean operators 140, such as AND, OR, NOR, XOR, etc., to be used in a date effecting condition for the comparison.
The database 110 may store pattern and string operators 142 for comparison against the resultant date. An example pattern operator may be, “PATTERN(01/01/1990,‘SMTWtFS’)=‘S’ & [MONTH=6|MONTH=7|MONTH=8].” The logic block decodes this expression as determine if target is a Weekend in the summer (June, July, or August). The pattern and string operators are constructed and resolved similar to the segmenting component.
The software engine 100 may merge two or more expression by forming a compounded expression. The two or more expressions are typically incorporated into a larger more complex expression. The two or more expressions are each resolved and then utilized to yield a resultant date.
FIGS. 5a and 5b illustrate an exemplary flow diagram to establish a resultant date based upon an expression having one or more components and corresponding parameters that modify the value of the components and then taking an action based upon the resultant date.
In block 502, the software engine receives a date input as an expression having one or more components and other parameters to modify the value of that component. The expression establishes and manipulates a target date in order to eventually determine a specific resultant date.
In block 504, the software engine determines if the expression in the date input has a relative date value or a constant date value.
In blocks 506a and 506b, if the date input has a relative date value, then the engine uses a target date as a starting point and uses modifying parameters to determine a resultant date. In an embodiment, if the expression giving the date input has a relative date value, then the engine decodes the date input into components making up the starting point and modifying parameters to manipulate the starting point to yield a resultant date.
In block 508, the software engine determines that if a date input has a constant date value, then the constant date value is the resultant date.
In block 510, the software engine utilizes the resultant date by coupling an action to be taken with the resultant date such as comparing a second resultant date generated by a second expression, resolving a date effecting condition with the resultant date, retrieve or schedule information associated with that resultant date, etc.
In block 512, the software engine determines if a date-effecting condition is associated with the date input. Different types of date-effecting conditions may exist. The software engine compares the resultant date against the date-effecting condition.
In block 514, the software engine compares the resultant date against any date-effecting conditions. Typically, the comparison yields a true false result. The software engine may then take an action based upon that comparison, if the date-effecting condition is satisfied. For example, “schedule a meeting for the first Monday of every month but not if that first Monday is a holiday. If Monday is a holiday schedule the meeting for the next day.” If the condition, “but not Monday is a holiday” the resultant date is modified to yield the Tuesday after the holiday.
In block 516, the software engine either directly or indirectly through a cooperating software program schedules events to occur based upon the resultant date or potentially modified resultant date.
In block 518, the software engine either directly or indirectly through a cooperating software program retrieves information associated with the resultant date or potentially modified resultant date.
In block 520, the software engine either directly or indirectly through a cooperating software program derives information from the comparing the resultant date or potentially modified resultant date with other information.
In block 522, the software engine stores this first resultant date for later use such as comparing with a second date, or retrieving a stored resultant date for a comparison.
In block 524, the software engine resolves compounded expressions. Multiple expressions may be merged into a single expression allowing very complex date driven tasks with many different date-effecting conditions to be automatically performed.
In block 526, the software engine may store a user-defined expression under an Alias for future use in a final expression that contains a set of two or more individual expressions. For example, Presidential Inauguration Day can be defined in an expression as “*(##/##/####+3years^(01/20/1994,4 years))WEEKDAY(1),” but saved and used under the word Alias of Presidential Inauguration Day. Note, the logic decodes the expression as the 20th of January of the year following presidential election year but not if the 20th is a Sunday, then Inauguration Day is the 21st of January.
In one embodiment, the instructions used to facilitate the software engine can be embodied onto a machine-readable medium. A machine-readable storage medium includes any mechanism that provides (e.g., stores) information in a form readable by a machine (e.g., a computer). For example, a machine-readable storage medium includes read only memory (ROM); random access memory (RAM); magnetic disk storage media; optical disk storage media; flash memory devices; DVD's, EPROMs, EEPROMs, FLASH, magnetic or optical cards, or any type of media suitable for storing electronic instructions. Slower mediums could be cached to a faster, more practical, medium.
In an embodiment, any of the logic described above consists of electronic circuits that follow the rules of Boolean Logic, software that contain patterns of instructions, or any combination of both.
FIG. 6 illustrates a block diagram of an exemplary computer system that may use an embodiment of a machine-readable medium that provides instructions, which when executed by a machine, cause the machine to perform operations based upon a resultant date. In one embodiment, computer system 600 comprises a communication mechanism or bus 611 for communicating information, and an integrated circuit component such as a processor 612 coupled with bus 611 for processing information. In an embodiment, the Processor 612 may include a microprocessor, but is not limited to a microprocessor.
Computer system 600 further comprises a random access memory (RAM), or other dynamic storage device 604 (referred to as main memory) coupled to bus 611 for storing information and instructions to be executed by processor 612. Main memory 604 also may be used for storing temporary variables or other intermediate information during execution of instructions by processor 612. One or more of the components in the computer system 600 such as the Main memory 604, Static memory 606, a disk in the mass storage memory 607, contains the instructions to perform operations based upon a resultant date.
Computer system 600 also comprises a read only memory (ROM) and/or other static storage device 606 coupled to bus 611 for storing static information and instructions for processor 612, and a mass storage memory 607, such as a magnetic disk or optical disk and its corresponding disk drive. Mass storage memory 607 is coupled to bus 611 for storing information and instructions.
Computer system 600 may further be coupled to a display device 621, such as a cathode ray tube (CRT) or liquid crystal display (LCD), coupled to bus 611 for displaying information to a computer user. An alphanumeric input device (keyboard) 622, including alphanumeric and other keys, may also be coupled to bus 611 for communicating information and command selections to processor 612. An additional user input device is cursor control device 623, such as a mouse, trackball, trackpad, stylus, or cursor direction keys, coupled to bus 611 for communicating direction information and command selections to processor 612, and for controlling cursor movement on a display device 612.
Another device that may be coupled to bus 611 is a hard copy device 624, which may be used for printing instructions, data, or other information on a medium such as paper, film, or similar types of media. Furthermore, a sound recording and playback device, such as a speaker and/or microphone (not shown) may optionally be coupled to bus 611 for audio interfacing with computer system 600. Another device that may be coupled to bus 611 is a wired/wireless communication capability 625 to communication to a phone.
Some portions of the detailed descriptions above are presented in terms of algorithms and symbolic representations of operations on data bits within a computer memory. These algorithmic descriptions and representations are the means used by those skilled in the data processing arts to most effectively convey the substance of their work to others skilled in the art. An algorithm is here, and generally, conceived to be a self-consistent sequence of operations leading to a desired result. The operations are those requiring physical manipulations of physical quantities. Usually, though not necessarily, these quantities take the form of electrical or magnetic signals capable of being stored, transferred, combined, compared, and otherwise manipulated. It has proven convenient at times, principally for reasons of common usage, to refer to these signals as bits, values, elements, symbols, characters, terms, numbers, or the like.
It should be borne in mind, however, that all of these and similar terms are to be associated with the appropriate physical quantities and are merely convenient labels applied to these quantities. Unless specifically stated otherwise as apparent from the above discussions, it is appreciated that throughout the description, discussions utilizing terms such as “processing” or “computing” or “calculating” or “determining” or “displaying” or the like, refer to the action and processes of a computer system, or similar electronic computing device, that manipulates and transforms data represented as physical (electronic) quantities within the computer system's registers and memories into other data similarly represented as physical quantities within the computer system memories or registers, or other such information storage, transmission or display devices.
While some specific embodiments of the invention have been shown the invention is not to be limited to these embodiments. For example, the logic block may be programmed to interpret the use of a constant or variable time. Further different actions provide different types of targets such as a target date or target action. The expression providing the date input may be in a different form. The invention is to be understood as not limited by the specific embodiments described herein, but only by scope of the appended claims.

## Claims

1. A method performed on a computing device, comprising:
receiving a date input as an expression having one or more components and one or more parameters that modify the value of a particular component of the expression, the expression to establish and manipulate a target date in order to determine a resultant date, wherein the one or more components include a target date component, a primary component, a segmenting component, and an offset component, and wherein each component is defined by an identifier associated with one or more parameters qualifying the respective component;
determining if a date-effecting condition is associated with the expression by examining each of the primary component, segmenting component, and the offset component in order to determine the date-effecting condition, wherein the target date component is used to specify an initial target date as a starting point of the resultant date, wherein the primary component is used to specify a secondary input date to reference the target date against, wherein the segmenting component is used to explicitly segment time based on one or more parameters and a date returned the target date component and the primary component, and wherein the offset component is used to set off by a fixed amount a date value of at least one of the target date component, primary component, and the segmenting component; and
modifying the target date based upon the date-effecting condition in order to generate the resultant date, wherein an identifier of each component defines a constant value, variable value, and/or symbol to indicate a type of the associated parameters, and wherein one or more parameters associated with the identifier of each component are used to specify how the respective component can be used.

2. The method of claim 1, wherein an identifier of the primary component specifies a particular day and an associated parameter is an occurrence parameter that determines which occurrence of the identified day is to be returned with respect to the target date.

3. The method of claim 2, wherein the occurrence parameter is defined via either a positive number or a negative number, wherein when the occurrence parameter includes a positive number, the target dated is modified to a day on or after the particular day specified by the identifier of the primary component since the target date specified by the target date component, and wherein the number itself specifies a number of occurrences of the particular day in between the target date and the modified target date.

4. The method of claim 3, wherein when the occurrence parameter includes a negative number, the target dated is modified to a day the first on or before the particular day specified by the identifier of the primary component since the target date specified by the target date component, and wherein the number itself specifies a number of occurrences of the particular day in between the target date and the modified target date.

5. The method of claim 4, wherein the particular day specified by the identifier of the primary component is a particular day of a week as one of “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”, and “Sunday”.

6. The method of claim 5, wherein the modified target date becomes a number of occurrences of a particular day of the week specified by the primary component either on/after or on/before the original target date, and wherein the modified target date is used to construct the resultant date.

7. The method of claim 6, wherein the offset component includes an identifier and a constant value followed by a measurement of time, wherein the modified target date is further modified by a fixed amount represented by a number of measured time units specified by the constant value and the measurement of time as a measured time unit.

8. The method of claim 7, wherein the identifier of the offset component is either a plus sign (+) or a minus sign (−), wherein when the identifier of the offset component is a plus sign (+), the target date is further modified by offsetting from the prior target date by the fixed amount specified by the offset component, on or after the prior target date.

9. The method of claim 8, wherein when the identifier of the offset component is a minus sign (−), the target date is further modified by offsetting from the prior target date by the fixed amount specified by the offset component, on or before the prior target date.

10. The method of claim 9, wherein the measurement of time is one of year, month, week, day, hour, minute, and second.

11. The method of claim 7, wherein the segmenting component includes a first parameter specifying a date from which segmenting is to be based on, a second parameter specifying an interval, and a third parameter specifying an occurrence, wherein starting from a date specified by the first parameter, time is segmented for every interval specified by the second parameter, the resultant date is determined based on a particular occurrence specified by the third parameter of the time segments after a reference date returned based on a previous component of the expression.

12. The method of claim 11, wherein the segmenting component is identified by a symbol identifier of “^” and the target date component is identified by a symbol identifier of “*”.

13. A machine-readable storage medium that provides instructions tangibly stored therein, which when executed by a machine, cause the machine to perform operations comprising:
receive a date input as an expression having one or more components and one or more parameters that modify the value of a particular component of the expression, the expression to establish and manipulate a target date in order to determine a resultant date, wherein the one or more components include a target date component, a primary component, a segmenting component, and an offset component, and wherein each component is defined by an identifier associated with one or more parameters qualifying the respective component;
determine if a date-effecting condition is associated with the expression by examining each of the primary component, segmenting component, and the offset component in order to determine the date-effecting condition, wherein the target date component is used to specify an initial target date as a starting point of the resultant date, wherein the primary component is used to specify a secondary input date to reference the target date against, wherein the segmenting component is used to explicitly segment time based on one or more parameters and a date returned the target date component and the primary component, and wherein the offset component is used to set off by a fixed amount a date value of at least one of the target date component, primary component, and the segmenting component; and
modify the target date based upon the date-effecting condition in order to generate the resultant date, wherein an identifier of each component defines a constant value, variable value, and/or symbol to indicate a type of the associated parameters, and wherein one or more parameters associated with the identifier of each component are used to specify how the respective component can be used.

14. The machine-readable storage medium of claim 13, wherein an identifier of the primary component specifies a particular day and an associated parameter is an occurrence parameter that determines which occurrence of the identified day is to be returned with respect to the target date.

15. The machine-readable storage medium of claim 14, wherein the occurrence parameter is defined via either a positive number or a negative number, wherein when the occurrence parameter includes a positive number, the target dated is modified to a day on or after the particular day specified by the identifier of the primary component since the target date specified by the target date component, and wherein the number itself specifies a number of occurrences of the particular day in between the target date and the modified target date.

16. The machine-readable storage medium of claim 15, wherein when the occurrence parameter includes a negative number, the target dated is modified to a day the first on or before the particular day specified by the identifier of the primary component since the target date specified by the target date component, and wherein the number itself specifies a number of occurrences of the particular day in between the target date and the modified target date.

17. The machine-readable storage medium of claim 16, wherein the particular day specified by the identifier of the primary component is a particular day of a week as one of “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”, and “Sunday”.

18. The machine-readable storage medium of claim 17, wherein the modified target date becomes a number of occurrences of a particular day of the week specified by the primary component either on/after or on/before the original target date, and wherein the modified target date is used to construct the resultant date.

19. The machine-readable storage medium of claim 18, wherein the offset component includes an identifier and a constant value followed by a measurement of time, wherein the modified target date is further modified by a fixed amount represented by a number of measured time units specified by the constant value and the measurement of time as a measured time unit.

20. The machine-readable storage medium of claim 19, wherein the identifier of the offset component is either a plus sign (+) or a minus sign (−), wherein when the identifier of the offset component is a plus sign (+), the target date is further modified by offsetting from the prior target date by the fixed amount specified by the offset component, on or after the prior target date.

21. The machine-readable storage medium of claim 20, wherein when the identifier of the offset component is a minus sign (−), the target date is further modified by offsetting from the prior target date by the fixed amount specified by the offset component, on or before the prior target date.

22. The machine-readable storage medium of claim 21, wherein the measurement of time is one of year, month, week, day, hour, minute, and second.

23. The machine-readable storage medium of claim 19, wherein the segmenting component includes a first parameter specifying a date from which segmenting is to be based on, a second parameter specifying an interval, and a third parameter specifying an occurrence, wherein starting from a date specified by the first parameter, time is segmented for every interval specified by the second parameter, the resultant date is determined based on a particular occurrence specified by the third parameter of the time segments after a reference date returned based on a previous component of the expression.

24. The machine-readable storage medium of claim 23, wherein the segmenting component is identified by a symbol identifier of “^” and the target date component is identified by a symbol identifier of “*”.

25. A data processing system, comprising:
a processor; and
a memory coupled to the processor for storing instructions, which when executed from the memory, cause the processor to perform a method, the method including
receiving a date input as an expression having one or more components and one or more parameters that modify the value of a particular component of the expression, the expression to establish and manipulate a target date in order to determine a resultant date, wherein the one or more components include a target date component, a primary component, a segmenting component, and an offset component, and wherein each component is defined by an identifier associated with one or more parameters qualifying the respective component,
determining if a date-effecting condition is associated with the expression by examining each of the primary component, segmenting component, and the offset component in order to determine the date-effecting condition, wherein the target date component is used to specify an initial target date as a starting point of the resultant date, wherein the primary component is used to specify a secondary input date to reference the target date against, wherein the segmenting component is used to explicitly segment time based on one or more parameters and a date returned the target date component and the primary component, and wherein the offset component is used to set off by a fixed amount a date value of at least one of the target date component, primary component, and the segmenting component, and
modifying the target date based upon the date-effecting condition in order to generate the resultant date, wherein an identifier of each component defines a constant value, variable value, and/or symbol to indicate a type of the associated parameters, and wherein one or more parameters associated with the identifier of each component are used to specify how the respective component can be used.

26. The system of claim 25, wherein an identifier of the primary component specifies a particular day and an associated parameter is an occurrence parameter that determines which occurrence of the identified day is to be returned with respect to the target date.

27. The system of claim 26, wherein the occurrence parameter is defined via either a positive number or a negative number, wherein when the occurrence parameter includes a positive number, the target dated is modified to a day on or after the particular day specified by the identifier of the primary component since the target date specified by the target date component, and wherein the number itself specifies a number of occurrences of the particular day in between the target date and the modified target date.

28. The system of claim 27, wherein when the occurrence parameter includes a negative number, the target dated is modified to a day the first on or before the particular day specified by the identifier of the primary component since the target date specified by the target date component, and wherein the number itself specifies a number of occurrences of the particular day in between the target date and the modified target date.

29. The system of claim 28, wherein the particular day specified by the identifier of the primary component is a particular day of a week as one of “Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”, and “Sunday”.

30. The system of claim 29, wherein the modified target date becomes a number of occurrences of a particular day of the week specified by the primary component either on/after or on/before the original target date, and wherein the modified target date is used to construct the resultant date.

31. The system of claim 30, wherein the offset component includes an identifier and a constant value followed by a measurement of time, wherein the modified target date is further modified by a fixed amount represented by a number of measured time units specified by the constant value and the measurement of time as a measured time unit.

32. The system of claim 31, wherein the identifier of the offset component is either a plus sign (+) or a minus sign (−), wherein when the identifier of the offset component is a plus sign (+), the target date is further modified by offsetting from the prior target date by the fixed amount specified by the offset component, on or after the prior target date.

33. The system of claim 32, wherein when the identifier of the offset component is a minus sign (−), the target date is further modified by offsetting from the prior target date by the fixed amount specified by the offset component, on or before the prior target date.

34. The system of claim 33, wherein the measurement of time is one of year, month, week, day, hour, minute, and second.

35. The system of claim 31, wherein the segmenting component includes a first parameter specifying a date from which segmenting is to be based on, a second parameter specifying an interval, and a third parameter specifying an occurrence, wherein starting from a date specified by the first parameter, time is segmented for every interval specified by the second parameter, the resultant date is determined based on a particular occurrence specified by the third parameter of the time segments after a reference date returned based on a previous component of the expression.

36. The system of claim 35, wherein the segmenting component is identified by a symbol identifier of “^” and the target date component is identified by a symbol identifier of “*”.