---
name: "dateseq"
section: "1"
platform: "linux"
package: "dateutils"
version: "0.4.11-3"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/dateseq"
---

# dateseq(1)

Generate a sequence of date/times from FIRST to LAST, optionally in steps of

## NAME

dateseq - Generate a sequence of date/times from FIRST to LAST, optionally in steps of

## SYNOPSIS

**dateseq** \[*OPTION*\]...  FIRST \[\[*INCREMENT*\] *LAST*\]

## DESCRIPTION

Generate a sequence of date/times from FIRST to LAST, optionally in steps of INCREMENT (which defaults to \`1d').

If LAST is omitted it defaults to \`now' if FIRST is a date/time, or \`today' if FIRST is a date, or \`time' if FIRST is a time.

The values of FIRST and LAST are always inclusive and no date/times before FIRST and no date/times after LAST will be printed.

Negative INCREMENTs must be given, i.e. if FIRST is newer than LAST.

Recognized *OPTION*s:

- **-h, --help**

  Print help and exit

- **-V, --version**

  Print version and exit

- **-q, --quiet**

  Suppress message about date/time and duration parser errors and fix-ups. The default is to print a warning or the fixed up value and return error code 2.

- **-f, --format=*STRING***

  Output format.  This can either be a specifier string (similar to strftime()'s FMT) or the name of a calendar.

- **-i, --input-format=*STRING*...**

  Input format, can be used multiple times. Each date/time will be passed to the input format parsers in the order they are given, if a date/time can be read successfully with a given input format specifier string, that value will be used.

- **-b, --base=*DT***

  For underspecified input use DT as a fallback to fill in missing fields.  Also used for ambiguous format specifiers to position their range on the absolute time line. Must be a date/time in ISO8601 format. If omitted defaults to the current date/time.

- **-e, --backslash-escapes**

  Enable interpretation of backslash escapes in the output and input format specifier strings.

- **--locale=*LOCALE***

  Format results according to LOCALE, this would only affect month and weekday names.

- **--from-locale=*LOCALE***

  Interpret dates on stdin or the command line as coming from the locale LOCALE, this would only affect month and weekday names as input formats have to be specified explicitly.

- **-s, --skip=*STRING*...**

  Skip weekdays specified by STRING. STRING can be a single weekday (Mon, Tue, etc.), and to skip several days the --skip option can be used multiple times. STRING can also be a comma-separated list of weekday names, or \`ss' to skip weekends (sat+sun) altogether. STRING can also contain date ranges like \`mo-we' for monday to wednesday.

- **--alt-inc=*STRING***

  Alternative increment to use when a date is hit that is skipped as per --skip. This increment will be applied until a non-skipped date is reached. The special case \`0' (default) deactivates alternative incrementing.  A useful value could be \`1d' for increasing sequences and \`-1d' for decreasing sequences, so if a skipped date is encountered the next non-skipped date after/before will be used.

- **--compute-from-last**

  Compute a start value from LAST using INCREMENT. This option has an effect only when INCREMENT is not a divisor of the duration between FIRST and LAST.  In such case, an alternative FIRST will be computed by consecutively subtracting INCREMENT from LAST until FIRST is hit or crossed.

## FORMAT SPECS

Format specs in dateutils are similar to posix' strftime().

However, due to a broader range of supported calendars dateutils must employ different rules.

Date specs:

```
  %a  The abbreviated weekday name
  %A  The full weekday name
  %_a The weekday name shortened to a single character (MTWRFAS)
  %b  The abbreviated month name
  %B  The full month name
  %_b The month name shortened to a single character (FGHJKMNQUVXZ)
  %c  The count of the weekday within the month (range 00 to 05)
  %C  The count of the weekday within the year (range 00 to 53)
  %d  The day of the month, 2 digits (range 00 to 31)
  %D  The day of the year, 3 digits (range 000 to 366)
  %F  Equivalent to %Y-%m-%d (ymd's canonical format)
  %g  ISO week date year without the century (range 00 to 99)
  %G  ISO week date year including the century
  %j  Equivalent to %D
  %m  The month in the current calendar (range 00 to 12)
  %Q  The quarter of the year (range Q1 to Q4)
  %q  The number of the quarter (range 01 to 04)
  %s  The number of seconds since the Epoch.
  %u  The weekday as number (range 01 to 07, Sunday being 07)
  %U  The week count,  day of week is Sun (range 00 to 53)
  %V  The ISO week count,  day of week is Mon (range 01 to 53)
  %w  The weekday as number (range 00 to 06, Sunday being 00)
  %W  The week count,  day of week is Mon (range 00 to 53)
  %y  The year without a century (range 00 to 99)
  %Y  The year including the century
  %_y The year shortened to a single digit
  %Z  The zone offset in hours and minutes (HH:MM) with
      a preceding sign (+ for offsets east of UTC, - for offsets
      west of UTC)
```

```
  %Od The day as roman numerals
  %Om The month as roman numerals
  %Oy The two digit year as roman numerals
  %OY The year including the century as roman numerals
```

```
  %rs In time systems whose Epoch is different from the unix Epoch, this
      selects the number of seconds since then.
  %rY In calendars with years that don't coincide with the Gregorian
      years, this selects the calendar's year.
```

```
  %dth  The day of the month as an ordinal number, 1st, 2nd, 3rd, etc.
  %mth  The month of the year as an ordinal number, 1st, 2nd, 3rd, etc.
```

```
  %db The business day of the month (since last month's ultimo)
  %dB Number of business days until this month's ultimo
```

Time specs:

```
  %H  The hour of the day using a 24h clock, 2 digits (range 00 to 23)
  %I  The hour of the day using a 12h clock, 2 digits (range 01 to 12)
  %M  The minute (range 00 to 59)
  %N  The nanoseconds (range 000000000 to 999999999)
  %p  The string AM or PM, noon is PM and midnight is AM.
  %P  Like %p but in lowercase
  %S  The  (range 00 to 60, 60 is for leap seconds)
  %T  Equivalent to %H:%M:%S
```

General specs:

```
  %n  A newline character
  %t  A tab character
  %%  A literal % character
```

Modifiers:

```
  %O  Modifier to turn decimal numbers into Roman numerals
  %r  Modifier to turn units into real units
  %0  Modifier to turn on zero prefixes
  %SPC  Modifier to turn on space prefixes
  %-  Modifier to turn off prefixes altogether
  th  Suffix, read and print ordinal numbers
  b   Suffix, treat days as business days
```

By design dates before 1601-01-01 are not supported.

For conformity here is a list of calendar designators and their corresponding format string:

```
  ymd     %Y-%m-%d
  ymcw    %Y-%m-%c-%w
  ywd     %rY-W%V-%u
  bizda   %Y-%m-%db
  lilian     n/a
  ldn        n/a
  julian     n/a
  jdn        n/a
  matlab     n/a
  mdn        n/a
```

These designators can be used as output format string, moreover, @code{lilian}/@code{ldn} and @code{julian}/@code{jdn} can also be used as input format string.

## SPECIFYING DURATIONS

Some tools ("dateadd", "dateseq") need durations as their input. Durations are generally incompatible with input formats as specified by "-i\|--input-format" and (at the moment) the input syntax is fixed.

The general format is "+-Nunit" where "+" or "-" is the sign, "N" a number, and "unit" the unit as discussed below.

Units:

```
  s  seconds
  m  minutes
  h  hours
  rs real-life seconds, as in including leap  transitions
```

```
  d  days
  b  business days
  mo months
  y  years
```

For historical reasons, we used to accept "m" in the context of date-only input as a qualifier for months.  As of 0.4.4, this is no longer the case.

## EXAMPLES

```
  $ dateseq 2012-02-01 2012-03-01
  2012-02-01
  2012-02-02
  2012-02-03
  2012-02-04
  2012-02-05
  2012-02-06
  2012-02-07
  2012-02-08
  2012-02-09
  2012-02-10
  2012-02-11
  2012-02-12
  2012-02-13
  2012-02-14
  2012-02-15
  2012-02-16
  2012-02-17
  2012-02-18
  2012-02-19
  2012-02-20
  2012-02-21
  2012-02-22
  2012-02-23
  2012-02-24
  2012-02-25
  2012-02-26
  2012-02-27
  2012-02-28
  2012-02-29
  2012-03-01
  $
```

```
  $ dateseq 2001-02-03 2001-03-03 --skip sat -f "%F %a"
  2001-02-04 Sun
  2001-02-05 Mon
  2001-02-06 Tue
  2001-02-07 Wed
  2001-02-08 Thu
  2001-02-09 Fri
  2001-02-11 Sun
  2001-02-12 Mon
  2001-02-13 Tue
  2001-02-14 Wed
  2001-02-15 Thu
  2001-02-16 Fri
  2001-02-18 Sun
  2001-02-19 Mon
  2001-02-20 Tue
  2001-02-21 Wed
  2001-02-22 Thu
  2001-02-23 Fri
  2001-02-25 Sun
  2001-02-26 Mon
  2001-02-27 Tue
  2001-02-28 Wed
  2001-03-01 Thu
  2001-03-02 Fri
  $
```

```
  $ dateseq --compute-from-last 2001-02-03 1 2001-03-03 --skip sat -f "%F %a"
  2001-02-04 Sun
  2001-02-05 Mon
  2001-02-06 Tue
  2001-02-07 Wed
  2001-02-08 Thu
  2001-02-09 Fri
  2001-02-11 Sun
  2001-02-12 Mon
  2001-02-13 Tue
  2001-02-14 Wed
  2001-02-15 Thu
  2001-02-16 Fri
  2001-02-18 Sun
  2001-02-19 Mon
  2001-02-20 Tue
  2001-02-21 Wed
  2001-02-22 Thu
  2001-02-23 Fri
  2001-02-25 Sun
  2001-02-26 Mon
  2001-02-27 Tue
  2001-02-28 Wed
  2001-03-01 Thu
  2001-03-02 Fri
  $
```

```
  $ dateseq 2001-02-03 3 2001-03-03 --skip sat,fri -f "%F %a"
  2001-02-06 Tue
  2001-02-12 Mon
  2001-02-15 Thu
  2001-02-18 Sun
  2001-02-21 Wed
  2001-02-27 Tue
  $
```

```
  $ dateseq --compute-from-last 2001-02-03 3 2001-03-03 --skip sat,fri -f "%F %a"
  2001-02-04 Sun
  2001-02-07 Wed
  2001-02-13 Tue
  2001-02-19 Mon
  2001-02-22 Thu
  2001-02-25 Sun
  2001-02-28 Wed
  $
```

```
  $ dateseq 2001-02-05 4 2001-03-04 -f "%F %a"
  2001-02-05 Mon
  2001-02-09 Fri
  2001-02-13 Tue
  2001-02-17 Sat
  2001-02-21 Wed
  2001-02-25 Sun
  2001-03-01 Thu
  $
```

```
  $ dateseq --compute-from-last 2001-02-05 4 2001-03-04 -f "%F %a"
  2001-02-08 Thu
  2001-02-12 Mon
  2001-02-16 Fri
  2001-02-20 Tue
  2001-02-24 Sat
  2001-02-28 Wed
  2001-03-04 Sun
  $
```

```
  $ dateseq --alt-inc 1d 2001-02-03 3 2001-03-03 --skip sat,fri -f "%F %a"
  2001-02-04 Sun
  2001-02-07 Wed
  2001-02-11 Sun
  2001-02-14 Wed
  2001-02-18 Sun
  2001-02-21 Wed
  2001-02-25 Sun
  2001-02-28 Wed
  $
```

```
  $ dateseq --compute-from-last --alt-inc 1d 2001-02-03 3 2001-03-03 --skip sat,fri -f "%F %a"
  2001-02-04 Sun
  2001-02-07 Wed
  2001-02-11 Sun
  2001-02-14 Wed
  2001-02-18 Sun
  2001-02-21 Wed
  2001-02-25 Sun
  2001-02-28 Wed
  $
```

```
  $ dateseq 2001-01-01 2d 2001-01-08
  2001-01-01
  2001-01-03
  2001-01-05
  2001-01-07
  $
```

```
  $ dateseq --compute-from-last 2001-01-01 2d 2001-01-08
  2001-01-02
  2001-01-04
  2001-01-06
  2001-01-08
  $
```

```
  $ dateseq 2001-01-08 -2d 2001-01-01
  2001-01-08
  2001-01-06
  2001-01-04
  2001-01-02
  $
```

```
  $ dateseq --compute-from-last 2001-01-08 -2d 2001-01-01
  2001-01-07
  2001-01-05
  2001-01-03
  2001-01-01
  $
```

```
  $ dateseq 10:00:00 12m 11:20:00
  10:00:00
  10:12:00
  10:24:00
  10:36:00
  10:48:00
  11:00:00
  11:12:00
  $
```

```
  $ dateseq --compute-from-last 10:00:00 12m 11:20:00
  10:08:00
  10:20:00
  10:32:00
  10:44:00
  10:56:00
  11:08:00
  11:20:00
  $
```

```
  $ dateseq 11:20:00 -12m 10:00:00
  11:20:00
  11:08:00
  10:56:00
  10:44:00
  10:32:00
  10:20:00
  10:08:00
  $
```

```
  $ dateseq --compute-from-last 11:20:00 -12m 10:00:00
  11:12:00
  11:00:00
  10:48:00
  10:36:00
  10:24:00
  10:12:00
  10:00:00
  $
```

## AUTHOR

Written by Sebastian Freundt \<freundt@fresse.org\>

## REPORTING BUGS

Report bugs to: https://github.com/hroptatyr/dateutils/issues

## SEE ALSO

The full documentation for **dateseq** is maintained as a Texinfo manual.  If the **info** and **dateseq** programs are properly installed at your site, the command

-

  **info (dateutils)dateseq**

should give you access to the complete manual.
