});
+/**
+ * Wrap a Date in a <time> block.
+ * @param {Date} date
+ * @param {Object} options
+ * @param {String=} options.title
+ */
+const timeElement = (date, options = {}) => {
+ const {
+ title,
+ pInf,
+ nInf,
+ otherwise,
+ } = options;
+ const attributes = {
+ ...(title && { title }),
+ ...(date instanceof Date && { datetime: date.toISOString() }),
+ };
+ return [
+ '<time',
+ elementAttributes(attributes),
+ '>',
+ dateFormat(date, pInf, nInf, otherwise),
+ '</time>',
+ ].join('');
+}
+
+
/**
* Render a duration.
* @param {Number} seconds
module.exports = {
dateOrNot,
dateFormat,
+ timeElement,
secondsToPeriod,
htmlHead,
htmlBody,
});
}); // dateFormat
+ describe('timeElement', function () {
+ it('renders a date', function () {
+ const when = new Date('2022-09-11T21:17:56.872Z');
+ const expected = '<time datetime="2022-09-11T21:17:56.872Z">Sep 11, 2022, 2:17:56 PM PDT</time>';
+ const result = th.timeElement(when);
+ assert.strictEqual(result, expected);
+ });
+ it('covers title', function () {
+ const when = new Date('2022-09-11T21:17:56.872Z');
+ const expected = '<time title="a date" datetime="2022-09-11T21:17:56.872Z">Sep 11, 2022, 2:17:56 PM PDT</time>';
+ const result = th.timeElement(when, { title: 'a date' });
+ assert.strictEqual(result, expected);
+ });
+ it('covers other', function () {
+ const expected = '<time>Mar 27, 2022, 3:28:05 PM PDT</time>';
+ const result = th.timeElement(1648420085049);
+ assert.strictEqual(result, expected);
+ });
+ }); // timeElement
+
describe('secondsToPeriod', function () {
it('covers seconds', function () {
const result = th.secondsToPeriod(45);