82 views

Skip to first unread message

Feb 3, 2008, 2:55:12 PM2/3/08

to

Hi,

is there a possibility to calculate time in LaTex. Let's say I define

a start time, add some minutes to it and use the current value in the

document. Something like:

\def\startTime{9:00}

\add\startTime{0:30}

\startTime % output 9:30

A solution of this would be very helpful.

Thanks,

Chitarup

Feb 3, 2008, 3:29:21 PM2/3/08

to

On Feb 3, 7:55 pm, Chitarup <chita...@googlemail.com> wrote:

> is there a possibility to calculate time in LaTex. Let's say I define

> a start time, add some minutes to it and use the current value in the

> document.

> is there a possibility to calculate time in LaTex. Let's say I define

> a start time, add some minutes to it and use the current value in the

> document.

Hi,

It's possible there's a neater way of doing this using the calc

package, but try the following

\documentclass{article}

\begin{document}

\newcount\hours

\newcount\minutes

\def\gettime#1:#2\relax#3#4{\def#3{#1}\def#4{#2}}

\newcommand{\add}[2]{\expandafter\gettime#1\relax{\hrs}{\mins}

\expandafter\gettime#2\relax{\addhrs}{\addmins}%

\hours=\hrs\relax

\advance\hours by \addhrs\relax

\minutes=\mins\relax

\advance\minutes by \addmins\relax

\ifnum\minutes>60\relax

\advance\minutes by -60\relax

\advance\hours by 1\relax

\else

\ifnum\minutes<0\relax

\advance\minutes by 60\relax

\advance\hours by -1\relax

\fi

\fi

\ifnum\hours>24\relax

\advance\hours by -24\relax

\else

\ifnum\hours<0\relax

\advance\hours by 24\relax

\fi

\fi

\ifnum\minutes<10\relax

\edef#1{\number\hours:0\number\minutes}%

\else

\edef#1{\number\hours:\number\minutes}%

\fi}

\def\startTime{9:00}

\add\startTime{0:30}

\startTime

\end{document}

Regards

Nicola Talbot

Feb 4, 2008, 4:14:26 AM2/4/08

to

Hello Nicola,

far out!!!! This is exactly what need.

Thank you very much.

Best whishes,

Chitarup

Feb 4, 2008, 4:18:43 AM2/4/08

to

On Feb 3, 8:29 pm, Nicola Talbot <n...@cmp.uea.ac.uk> wrote:

> \ifnum\minutes>60\relax

> \ifnum\minutes>60\relax

Sorry, that should have been

\ifnum\minutes>59\relax

> \ifnum\hours>24\relax

Likewise, that should be

\ifnum\hours>23\relax

Regards

Nicola Talbot

Feb 4, 2008, 12:43:26 PM2/4/08

to

Perhaps not exactly what you expected, but especially if you also need

to work with dates, then you may go with PerlTeX and one out of a

zillion date calculating modules, like DateTime, or Date::Calc.

Michele

--

>It's because the universe was programmed in C++.

No, no, it was programmed in Forth. See Genesis 1:12:

"And the earth brought Forth ..."

- Robert Israel in sci.math, thread "Why numbers?"

Feb 4, 2008, 5:09:19 PM2/4/08

to

Hello Nicola,

thanks for the correction. Unfortunately the code doesn't work within

a table:

\def\startTime{9:45}

\begin{tabular}{|p{1cm}|p{4cm}|}

\hline

Time &

Content\\

\hline

\hline

\add\startTime{0:05} \textbf{\startTime} & \quad \\

\hline

\add\startTime{0:05} \textbf{\startTime} & \quad \\

\hline

\add\startTime{0:05} \textbf{\startTime} & \quad \\

\hline

\end{tabular}

The output is always 9:50. Outside of an table it works fine. Any

ideas?

Regards,

Chitarup

Feb 4, 2008, 5:58:13 PM2/4/08

to

On Feb 4, 10:09 pm, Chitarup <chita...@googlemail.com> wrote:

> thanks for the correction. Unfortunately the code doesn't work within

> a table:

> thanks for the correction. Unfortunately the code doesn't work within

> a table:

try changing \edef to \xdef

Regards

Nicola Talbot

Feb 4, 2008, 8:59:03 PM2/4/08

to

> try changing \edef to \xdef

Hello Nicola,

yes, this is working.

Thanks,

Chitarup

Feb 5, 2008, 5:39:38 AM2/5/08

to

* Nicola Talbot schrieb:

> On Feb 4, 10:09 pm, Chitarup <chita...@googlemail.com> wrote:

>> thanks for the correction. Unfortunately the code doesn't work

>> within a table:

>

> try changing \edef to \xdef

Nicola,

I think one has to \xdef\startTime[] inside the tabular as outside.

Have a look on this example, which is correct:

\documentclass{article}

\newcount\hours

\newcount\minutes

\def\gettime#1:#2\relax#3#4{\def#3{#1}\def#4{#2}}

\newcommand{\add}[2]{\expandafter\gettime#1\relax{\hrs}{\mins}

\expandafter\gettime#2\relax{\addhrs}{\addmins}%

\hours=\hrs\relax

\advance\hours by \addhrs\relax

\minutes=\mins\relax

\advance\minutes by \addmins\relax

\ifnum\minutes>59\relax

\advance\minutes by -60\relax

\advance\hours by 1\relax

\else

\ifnum\minutes<0\relax

\advance\minutes by 60\relax

\advance\hours by -1\relax

\fi

\fi

\ifnum\hours>23\relax

\advance\hours by -24\relax

\else

\ifnum\hours<0\relax

\advance\hours by 24\relax

\fi

\fi

\ifnum\minutes<10\relax

\xdef#1{\number\hours:0\number\minutes}%

\else

\xdef#1{\number\hours:\number\minutes}%

\fi}

\begin{document}

Start 22:08\def\startTime{22:08},

duration 5:53\add\startTime{05:53},

ETA (should be 4:01) calculated \startTime

\begin{table}

\centering

\begin{tabular}{rrrr}

Start 23:01 \xdef\startTime{23:01}

&duration 01:01 \add\startTime{01:01}

&ETA should be 0:02

&calculated \startTime\\

Start 02:55 \xdef\startTime{02:55}

&duration 23:05 \add\startTime{23:05}

&ETA should be 2:00

&calculated \startTime\\

\end{tabular}

\caption{Timetable}

\end{table}

\end{document}

Sincerely -- Olaf Meltzer

Feb 5, 2008, 5:50:44 AM2/5/08

to

* Nicola Talbot schrieb:

> On Feb 4, 10:09 pm, Chitarup <chita...@googlemail.com> wrote:

>> thanks for the correction. Unfortunately the code doesn't work

>> within a table:

>

> try changing \edef to \xdef

Nicola,

I think one has to \xdef\startTime{} even inside the tabular.

Have a look on this example, which is correct:

\documentclass{article}

\newcount\hours

\newcount\minutes

\def\gettime#1:#2\relax#3#4{\def#3{#1}\def#4{#2}}

\newcommand{\add}[2]{\expandafter\gettime#1\relax{\hrs}{\mins}

\expandafter\gettime#2\relax{\addhrs}{\addmins}%

\hours=\hrs\relax

\advance\hours by \addhrs\relax

\minutes=\mins\relax

\advance\minutes by \addmins\relax

\ifnum\minutes>59\relax

\advance\minutes by -60\relax

\advance\hours by 1\relax

\else

\ifnum\minutes<0\relax

\advance\minutes by 60\relax

\advance\hours by -1\relax

\fi

\fi

\ifnum\hours>23\relax

\advance\hours by -24\relax

\else

\ifnum\hours<0\relax

\advance\hours by 24\relax

\fi

\fi

\ifnum\minutes<10\relax

\xdef#1{\number\hours:0\number\minutes}%

\else

\xdef#1{\number\hours:\number\minutes}%

\fi}

\begin{document}

Feb 5, 2008, 7:40:13 AM2/5/08

to

* Olaf Meltzer schrieb:

> Nicola,

>

> I think one has to \xdef\startTime{} even inside the tabular.

> Have a look on this example, which is correct:

Another very small correction: First line of \newcommand{\add}...

should end with % to prevent a superfluous space wich otherwise would

prevent correct alignment.

As a result of further discussion in d.c.t.t one supposed to have a

solution to subtract times as well, and I modified your proposal in

accordance. Have a look on the combined add/subtract example.

%% LaTeX-Example: To add and subtract times

%%

%% Based on Nicola Talbots solution

%% of Chitarups problem from 2008-02-04 in ctt

%%

\documentclass{article}

\newcount\hours

\newcount\minutes

\def\gettime#1:#2\relax#3#4{\def#3{#1}\def#4{#2}}

\newcommand{\add}[2]{\expandafter\gettime#1\relax{\hrs}{\mins}%

\newcommand{\sub}[2]{\expandafter\gettime#1\relax{\hrs}{\mins}%

\expandafter\gettime#2\relax{\subhrs}{\submins}%

\hours=\hrs\relax

\advance\hours by -\subhrs\relax

\minutes=\mins\relax

\advance\minutes by -\submins\relax

\ifnum\minutes>59\relax

\advance\minutes by -60\relax

\advance\hours by 1\relax

\else

\ifnum\minutes<0\relax

\advance\minutes by 60\relax

\advance\hours by -1\relax

\fi

\fi

\ifnum\hours>23\relax

\advance\hours by -24\relax

\else

\ifnum\hours<0\relax

\advance\hours by 24\relax

\fi

\fi

\ifnum\minutes<10\relax

\xdef#1{\number\hours:0\number\minutes}%

\else

\xdef#1{\number\hours:\number\minutes}%

\fi}

\begin{document}

\section{Calculation of estimated time of arrival (ETA)}

The estimated time of arrival (ETA) is calculated as estimated

time of takeoff (ETT) plus duration.

ETT 22:08\def\startTime{22:08},

duration 5:53\add\startTime{05:53},

ETA (should be 4:01) calculated \startTime.

\section{Calculation of duration}

The duration is calculated as differenz between actual time of

arrival (ATA) and actual time of takoff (ATT).

ATT 20:05, ATA 0:15\def\startTime{00:15}, duration (should be

4:10)\sub\startTime{20:05}, calculated \startTime.

\begin{table}

\centering

\begin{tabular}{rrrr}

ETT&duration&correct&calculated\\

23:01\xdef\startTime{23:01}

&1:01\add\startTime{1:01}

&0:02

&\startTime\\

2:55\xdef\startTime{2:55}

&23:05\add\startTime{23:05}

&2:00

&\startTime\\

\end{tabular}

\caption{Calculated ETA (added times)}

\end{table}

\begin{table}

\centering

\begin{tabular}{rrrr}

ATA&ATT&correct&calculated\\

21:15\xdef\startTime{21:15}

&20:05\sub\startTime{20:05}

&1:10

&\startTime\\

0:15\xdef\startTime{0:15}

&20:05\sub\startTime{20:05}

&4:10

&\startTime\\

\end{tabular}

\caption{Calculated duration (subtracted times)}

Reply all

Reply to author

Forward

0 new messages

Search

Clear search

Close search

Google apps

Main menu