Durations

Add up durations and convert them: a timesheet, a playlist, a set of tasks.

Durations, one per line

Write them as you like: 1h30, 45 min, 2:15:30, 1.5 h, 3 days 4 h, PT1H30M. A line starting with - is subtracted; # starts a comment.

What is understood

Units
ms, s / sec, min / m / mn, h / hr, d / j / days, w / sem / weeks, in English or French, singular or plural. A number right after hours is minutes (1h30), right after minutes it is seconds (2m30). Decimals take a point or a comma.
Clock notation
1:30 is 1 hour 30 minutes (hours:minutes), 1:30:15 adds seconds. Hours can go beyond 24: 36:00.
ISO 8601
PT1H30M, P2DT4H, P1W. The total is given in hours (PT26H30M rather than P1DT2H30M): added to a date, a day “D” can last 23 or 25 hours when the clocks change.
Months and years
Refused: a month lasts 28 to 31 days and a year 365 or 366. To add months to a date, use dates/add.

Transparency

Everything is computed in your browser, by the scripts listed below. Nothing you type leaves this page.

Enforced by your browser
This page's Content Security Policy allows a single destination, the site's audience measurement (connect-src https://stats.r-no.fr, see below), and forbids any form submission (form-action 'none'), so even a bug could not send what you type anywhere. You can read the policy at the top of the page source.
Audience measurement
Like every page of the site, this one counts its visit with Umami, installed on R-no’s own server (stats.r-no.fr). It receives the address of the page, without parameters or anchor, the site you came from (its domain only), your browser, system, language and screen size, and the country, region and city deduced from your IP address, which is not kept. It never receives what you type, nor the result of the tool. No cookie, nothing stored in your browser; if your browser asks not to be tracked (Do Not Track), nothing is measured. The data is erased after 25 months.
  • /commun/mesure.js: the filter applied before each sending, written for R-no Toolbox. 1.4 kB
    SHA-256 225eec74fd12623d82fc05ee7d222be629ce454d081c129e8d1e249ed37ee716
  • https://stats.r-no.fr/m.js: Umami’s tracker, open source (MIT), served by the measurement server. Its fingerprint is not shown here: it changes with each version of Umami, and you cannot check from your browser that it is the published code. For that part, you have to trust R-no.
What is stored
No cookie, and nothing in the address. What you type is never stored: it disappears when you reload or close the page. Your language is given by the address itself (/en/ or /fr/): nothing is stored to remember it. Like any website, the server records the download of the page and its files in its access logs (IP address, date and time, address requested, browser name). It never receives what you type.
Code that runs here
  • app.js: the reading of durations, the sums and the page, written for R-no Toolbox. Not minified, no third-party library. 13.5 kB
    SHA-256 88de9f08cf30d84fceec9fd95fb14206fb216c18ffee1ff2cd7e5e8e47108af3
  • textes.js: the French messages of the tool, shown by its script (the rest of the French page is written into its HTML when the site is built). It only defines texts, with no logic. 6.4 kB
    SHA-256 bcd9bb42620b1280197cb9204fd1703b51b6bf021c88391836b37e63b0bf9fcb
  • /commun/langue.js: the language helper, the same on every page of the site. It reads the language of the page and gives the tool its messages in that language. It stores nothing. 1.6 kB
    SHA-256 80f76f69773ef628d36d09bf8387cfedebda4529210d7120649b6f5603310631
How it is computed
Every duration is converted to whole milliseconds, decimals included (0.1 h is exactly 360,000 ms), and the sum is exact. An hour is 3,600 seconds, a day 24 hours, a week 7 days.
Check it yourself
Download a script and compare its fingerprint with the one above:
curl -s https://r-no.fr/dates/duration/app.js | shasum -a 256
Limits
Months and years are refused (their length varies). No leap seconds. Decimal hours are rounded to two places, other values to four. At most 1,000 lines.