Skip to content

Commit

Permalink
utlis: add function to diff timestamps
Browse files Browse the repository at this point in the history
  • Loading branch information
carlinmack committed Jun 5, 2024
1 parent e3306a6 commit de12d20
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 0 deletions.
55 changes: 55 additions & 0 deletions src/lib/locale/DiffTimestamps.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
// This file is part of React-Invenio-Forms
// Copyright (C) 2024 CERN.
//
// React-Invenio-Forms is free software; you can redistribute it and/or modify it
// under the terms of the MIT License; see LICENSE file for more details.

import { DateTime } from "luxon";

/**
* Create duration string for two given timestamps
*
* @param firstTimestamp string ISO timestamp
* @param secondTimestamp string ISO timestamp
* @returns {string} string representation of duration, i.e. 3 days
*/
export const diffTimestamps = (firstTimestamp, secondTimestamp, language = "en") => {
const first = DateTime.fromISO(firstTimestamp);
const second = DateTime.fromISO(secondTimestamp);
const duration = first.diff(second).reconfigure({ locale: language });
// If we used a newer version of luxon we could just do this:
// return duration.toHuman();

// instead return the largest unit and value (ignore everything smaller)
const rescale = duration.shiftTo(
"years",
"months",
"weeks",
"days",
"hours",
"minutes",
"seconds",
"milliseconds"
); // in new luxon this is just duration.rescale()
const units = [
"years",
"months",
"weeks",
"days",
"hours",
"minutes",
"seconds",
"milliseconds",
];

for (const unit of units) {
if (rescale[unit] && rescale[unit] > 0) {
if (rescale[unit] == 1) {

Check warning on line 47 in src/lib/locale/DiffTimestamps.js

View workflow job for this annotation

GitHub Actions / Tests (18.x)

Expected '===' and instead saw '=='

Check warning on line 47 in src/lib/locale/DiffTimestamps.js

View workflow job for this annotation

GitHub Actions / Tests (16.x)

Expected '===' and instead saw '=='
return rescale[unit] + " " + unit.slice(0, -1); // remove s
} else {
return rescale[unit] + " " + unit;
}
}
}
return "-"; // in case all components are zero
};
1 change: 1 addition & 0 deletions src/lib/locale/index.js
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
export { toRelativeTime } from "./RelativeTime";
export { diffTimestamps } from "./DiffTimestamps";

0 comments on commit de12d20

Please sign in to comment.