The t N (
now] command pushes the
current date and time on the stack as a date form. The time is
reported in terms of the specified time zone; with no numeric prefix
argument, t N reports for the current time zone.
The t P (
calc-date-part) command extracts one part
of a date form. The prefix argument specifies the part; with no
argument, this command prompts for a part code from 1 to 9.
The various part codes are described in the following paragraphs.
The M-1 t P [
year] function extracts the year number
from a date form as an integer, e.g., 1991. This and the
following functions will also accept a real number for an
argument, which is interpreted as a standard Calc day number.
Note that this function will never return zero, since the year
1 BC immediately precedes the year 1 AD.
The M-2 t P [
month] function extracts the month number
from a date form as an integer in the range 1 to 12.
The M-3 t P [
day] function extracts the day number
from a date form as an integer in the range 1 to 31.
The M-4 t P [
hour] function extracts the hour from
a date form as an integer in the range 0 (midnight) to 23. Note
that 24-hour time is always used. This returns zero for a pure
date form. This function (and the following two) also accept
HMS forms as input.
The M-5 t P [
minute] function extracts the minute
from a date form as an integer in the range 0 to 59.
The M-6 t P [
second] function extracts the second
from a date form. If the current precision is 12 or less,
the result is an integer in the range 0 to 59. For higher
precision, the result may instead be a floating-point number.
The M-7 t P [
weekday] function extracts the weekday
number from a date form as an integer in the range 0 (Sunday)
to 6 (Saturday).
The M-8 t P [
yearday] function extracts the day-of-year
number from a date form as an integer in the range 1 (January 1)
to 366 (December 31 of a leap year).
The M-9 t P [
time] function extracts the time portion
of a date form as an HMS form. This returns ‘0@ 0' 0"’
for a pure date form.
The t M (
computes a new date form that represents the first day of the month
specified by the input date. The result is always a pure date
form; only the year and month numbers of the input are retained.
With a numeric prefix argument n in the range from 1 to 31,
t M computes the nth day of the month. (If n
is greater than the actual number of days in the month, or if
n is zero, the last day of the month is used.)
The t Y (
computes a new pure date form that represents the first day of
the year specified by the input. The month, day, and time
of the input date form are lost. With a numeric prefix argument
n in the range from 1 to 366, t Y computes the
nth day of the year (366 is treated as 365 in non-leap
years). A prefix argument of 0 computes the last day of the
year (December 31). A negative prefix argument from -1 to
-12 computes the first day of the nth month of the year.
The t W (
computes a new pure date form that represents the Sunday on or before
the input date. With a numeric prefix argument, it can be made to
use any day of the week as the starting day; the argument must be in
the range from 0 (Sunday) to 6 (Saturday). This function always
subtracts between 0 and 6 days from the input date.
Here’s an example use of
newweek: Find the date of the next
Wednesday after a given date. Using M-3 t W or ‘newweek(d, 3)’
will give you the preceding Wednesday, so ‘newweek(d+7, 3)’
will give you the following Wednesday. A further look at the definition
newweek shows that if the input date is itself a Wednesday,
this formula will return the Wednesday one week in the future. An
exercise for the reader is to modify this formula to yield the same day
if the input is already a Wednesday. Another interesting exercise is
to preserve the time-of-day portion of the input (
the time to midnight; hint: how can
newweek be defined in terms
The ‘pwday(date)’ function (not on any key) computes the
day-of-month number of the Sunday on or before date. With
two arguments, ‘pwday(date, day)’ computes the day
number of the Sunday on or before day number day of the month
specified by date. The day must be in the range from
7 to 31; if the day number is greater than the actual number of days
in the month, the true number of days is used instead. Thus
‘pwday(date, 7)’ finds the first Sunday of the month, and
‘pwday(date, 31)’ finds the last Sunday of the month.
With a third weekday argument,
pwday can be made to look
for any day of the week instead of Sunday.
The t I (
increases a date form by one month, or by an arbitrary number of
months specified by a numeric prefix argument. The time portion,
if any, of the date form stays the same. The day also stays the
same, except that if the new month has fewer days the day
number may be reduced to lie in the valid range. For example,
‘incmonth(<Jan 31, 1991>)’ produces ‘<Feb 28, 1991>’.
Because of this, t I t I and M-2 t I do not always give
the same results (‘<Mar 28, 1991>’ versus ‘<Mar 31, 1991>’
in this case).
The ‘incyear(date, step)’ function increases a date form by the specified number of years, which may be any positive or negative integer. Note that ‘incyear(d, n)’ is equivalent to ‘incmonth(d, 12*n)’, but these do not have simple equivalents in terms of day arithmetic because months and years have varying lengths. If the step argument is omitted, 1 year is assumed. There is no keyboard command for this function; use C-u 12 t I instead.
There is no
newday function at all because F [
serves this purpose. Similarly, instead of
incweek simply use ‘d + n’ or ‘d + 7 n’.
See Basic Arithmetic, for the f ] [
which can adjust a date/time form by a certain number of seconds.