@@ -121,9 +121,9 @@ <h1>Open Data Cube Release Tracker</h1>
121
121
< tr >
122
122
< th data-sort ="name "> Package Name</ th >
123
123
< th data-sort ="pypi_stable_version "> PyPI Version</ th >
124
- < th data-sort ="pypi_stable_age_days "> PyPI Age (days) </ th >
124
+ < th data-sort ="pypi_stable_age_days "> PyPI Age</ th >
125
125
< th data-sort ="github_stable_version "> GitHub Version</ th >
126
- < th data-sort ="github_stable_age_days "> GitHub Age (days) </ th >
126
+ < th data-sort ="github_stable_age_days "> GitHub Age</ th >
127
127
</ tr >
128
128
</ thead >
129
129
< tbody >
@@ -137,7 +137,7 @@ <h1>Open Data Cube Release Tracker</h1>
137
137
< td >
138
138
< div class ="age-display ">
139
139
140
- < span > 2 days ago </ span >
140
+ < span class =" pypi-stable-age " data-published-at =" 2025-08-05T03:43:30.771732Z " > </ span >
141
141
< span class ="date "> (05 August 2025)</ span >
142
142
143
143
@@ -149,7 +149,7 @@ <h1>Open Data Cube Release Tracker</h1>
149
149
< td >
150
150
< div class ="age-display ">
151
151
152
- < span > 2 days ago </ span >
152
+ < span class =" github-stable-age " data-published-at =" 2025-08-05T03:34:09Z " > </ span >
153
153
< span class ="date "> (05 August 2025)</ span >
154
154
155
155
</ div >
@@ -165,7 +165,7 @@ <h1>Open Data Cube Release Tracker</h1>
165
165
< td >
166
166
< div class ="age-display ">
167
167
168
- < span > 97 days ago </ span >
168
+ < span class =" pypi-stable-age " data-published-at =" 2025-05-01T05:20:49.632058Z " > </ span >
169
169
< span class ="date "> (01 May 2025)</ span >
170
170
171
171
@@ -177,7 +177,7 @@ <h1>Open Data Cube Release Tracker</h1>
177
177
< td >
178
178
< div class ="age-display ">
179
179
180
- < span > 97 days ago </ span >
180
+ < span class =" github-stable-age " data-published-at =" 2025-05-01T05:27:38Z " > </ span >
181
181
< span class ="date "> (01 May 2025)</ span >
182
182
183
183
</ div >
@@ -193,7 +193,7 @@ <h1>Open Data Cube Release Tracker</h1>
193
193
< td >
194
194
< div class ="age-display ">
195
195
196
- < span > 22 days ago </ span >
196
+ < span class =" pypi-stable-age " data-published-at =" 2025-07-16T02:26:00.716583Z " > </ span >
197
197
< span class ="date "> (16 July 2025)</ span >
198
198
199
199
@@ -224,12 +224,12 @@ <h1>Open Data Cube Release Tracker</h1>
224
224
< td >
225
225
< div class ="age-display ">
226
226
227
- < span > 157 days ago </ span >
227
+ < span class =" pypi-stable-age " data-published-at =" 2025-03-03T04:12:22.114450Z " > </ span >
228
228
< span class ="date "> (03 March 2025)</ span >
229
229
230
230
231
231
< span class ="prerelease ">
232
- < span > (98 days ago) </ span >
232
+ < span class =" pypi-prerelease-age " data-published-at =" 2025-05-01T03:04:49.650498Z " > </ span >
233
233
</ span >
234
234
235
235
</ div >
@@ -240,7 +240,7 @@ <h1>Open Data Cube Release Tracker</h1>
240
240
< td >
241
241
< div class ="age-display ">
242
242
243
- < span > 157 days ago </ span >
243
+ < span class =" github-stable-age " data-published-at =" 2025-03-03T04:21:43Z " > </ span >
244
244
< span class ="date "> (03 March 2025)</ span >
245
245
246
246
</ div >
@@ -256,7 +256,7 @@ <h1>Open Data Cube Release Tracker</h1>
256
256
< td >
257
257
< div class ="age-display ">
258
258
259
- < span > 51 days ago </ span >
259
+ < span class =" pypi-stable-age " data-published-at =" 2025-06-17T00:21:41.050285Z " > </ span >
260
260
< span class ="date "> (17 June 2025)</ span >
261
261
262
262
@@ -268,7 +268,7 @@ <h1>Open Data Cube Release Tracker</h1>
268
268
< td >
269
269
< div class ="age-display ">
270
270
271
- < span > 51 days ago </ span >
271
+ < span class =" github-stable-age " data-published-at =" 2025-06-17T00:20:58Z " > </ span >
272
272
< span class ="date "> (17 June 2025)</ span >
273
273
274
274
</ div >
@@ -284,7 +284,7 @@ <h1>Open Data Cube Release Tracker</h1>
284
284
< td >
285
285
< div class ="age-display ">
286
286
287
- < span > 705 days ago </ span >
287
+ < span class =" pypi-stable-age " data-published-at =" 2023-09-01T05:59:34.497489Z " > </ span >
288
288
< span class ="date "> (01 September 2023)</ span >
289
289
290
290
@@ -296,7 +296,7 @@ <h1>Open Data Cube Release Tracker</h1>
296
296
< td >
297
297
< div class ="age-display ">
298
298
299
- < span > 705 days ago </ span >
299
+ < span class =" github-stable-age " data-published-at =" 2023-09-01T06:28:08Z " > </ span >
300
300
< span class ="date "> (01 September 2023)</ span >
301
301
302
302
</ div >
@@ -312,7 +312,7 @@ <h1>Open Data Cube Release Tracker</h1>
312
312
< td >
313
313
< div class ="age-display ">
314
314
315
- < span > 26 days ago </ span >
315
+ < span class =" pypi-stable-age " data-published-at =" 2025-07-11T04:35:26.465387Z " > </ span >
316
316
< span class ="date "> (11 July 2025)</ span >
317
317
318
318
@@ -324,7 +324,7 @@ <h1>Open Data Cube Release Tracker</h1>
324
324
< td >
325
325
< div class ="age-display ">
326
326
327
- < span > 27 days ago </ span >
327
+ < span class =" github-stable-age " data-published-at =" 2025-07-11T04:14:03Z " > </ span >
328
328
< span class ="date "> (11 July 2025)</ span >
329
329
330
330
</ div >
@@ -340,7 +340,7 @@ <h1>Open Data Cube Release Tracker</h1>
340
340
< td >
341
341
< div class ="age-display ">
342
342
343
- < span > 254 days ago </ span >
343
+ < span class =" pypi-stable-age " data-published-at =" 2024-11-25T06:15:21.070046Z " > </ span >
344
344
< span class ="date "> (25 November 2024)</ span >
345
345
346
346
@@ -352,7 +352,7 @@ <h1>Open Data Cube Release Tracker</h1>
352
352
< td >
353
353
< div class ="age-display ">
354
354
355
- < span > 227 days ago </ span >
355
+ < span class =" github-stable-age " data-published-at =" 2024-12-23T03:51:48Z " > </ span >
356
356
< span class ="date "> (23 December 2024)</ span >
357
357
358
358
</ div >
@@ -372,12 +372,12 @@ <h1>Open Data Cube Release Tracker</h1>
372
372
< td >
373
373
< div class ="age-display ">
374
374
375
- < span > 126 days ago </ span >
375
+ < span class =" pypi-stable-age " data-published-at =" 2025-04-03T00:14:01.687146Z " > </ span >
376
376
< span class ="date "> (03 April 2025)</ span >
377
377
378
378
379
379
< span class ="prerelease ">
380
- < span > (9 days ago) </ span >
380
+ < span class =" pypi-prerelease-age " data-published-at =" 2025-07-28T06:35:44.828036Z " > </ span >
381
381
</ span >
382
382
383
383
</ div >
@@ -388,7 +388,7 @@ <h1>Open Data Cube Release Tracker</h1>
388
388
< td >
389
389
< div class ="age-display ">
390
390
391
- < span > 126 days ago </ span >
391
+ < span class =" github-stable-age " data-published-at =" 2025-04-03T00:13:24Z " > </ span >
392
392
< span class ="date "> (03 April 2025)</ span >
393
393
394
394
</ div >
@@ -404,7 +404,7 @@ <h1>Open Data Cube Release Tracker</h1>
404
404
< td >
405
405
< div class ="age-display ">
406
406
407
- < span > 28 days ago </ span >
407
+ < span class =" pypi-stable-age " data-published-at =" 2025-07-10T03:14:57.827283Z " > </ span >
408
408
< span class ="date "> (10 July 2025)</ span >
409
409
410
410
@@ -431,7 +431,7 @@ <h1>Open Data Cube Release Tracker</h1>
431
431
< td >
432
432
< div class ="age-display ">
433
433
434
- < span > 78 days ago </ span >
434
+ < span class =" pypi-stable-age " data-published-at =" 2025-05-20T06:05:41.138310Z " > </ span >
435
435
< span class ="date "> (20 May 2025)</ span >
436
436
437
437
@@ -443,7 +443,7 @@ <h1>Open Data Cube Release Tracker</h1>
443
443
< td >
444
444
< div class ="age-display ">
445
445
446
- < span > 78 days ago </ span >
446
+ < span class =" github-stable-age " data-published-at =" 2025-05-20T06:04:56Z " > </ span >
447
447
< span class ="date "> (20 May 2025)</ span >
448
448
449
449
</ div >
@@ -459,7 +459,7 @@ <h1>Open Data Cube Release Tracker</h1>
459
459
< td >
460
460
< div class ="age-display ">
461
461
462
- < span > 631 days ago </ span >
462
+ < span class =" pypi-stable-age " data-published-at =" 2023-11-15T03:26:21.415914Z " > </ span >
463
463
< span class ="date "> (15 November 2023)</ span >
464
464
465
465
@@ -486,7 +486,7 @@ <h1>Open Data Cube Release Tracker</h1>
486
486
< td >
487
487
< div class ="age-display ">
488
488
489
- < span > 568 days ago </ span >
489
+ < span class =" pypi-stable-age " data-published-at =" 2024-01-17T01:07:12.404052Z " > </ span >
490
490
< span class ="date "> (17 January 2024)</ span >
491
491
492
492
@@ -513,7 +513,7 @@ <h1>Open Data Cube Release Tracker</h1>
513
513
< td >
514
514
< div class ="age-display ">
515
515
516
- < span > 631 days ago </ span >
516
+ < span class =" pypi-stable-age " data-published-at =" 2023-11-15T03:26:25.444556Z " > </ span >
517
517
< span class ="date "> (15 November 2023)</ span >
518
518
519
519
@@ -540,7 +540,7 @@ <h1>Open Data Cube Release Tracker</h1>
540
540
< td >
541
541
< div class ="age-display ">
542
542
543
- < span > 631 days ago </ span >
543
+ < span class =" pypi-stable-age " data-published-at =" 2023-11-15T03:26:18.404842Z " > </ span >
544
544
< span class ="date "> (15 November 2023)</ span >
545
545
546
546
@@ -567,7 +567,7 @@ <h1>Open Data Cube Release Tracker</h1>
567
567
< td >
568
568
< div class ="age-display ">
569
569
570
- < span > 22 days ago </ span >
570
+ < span class =" pypi-stable-age " data-published-at =" 2025-07-16T04:08:52.277365Z " > </ span >
571
571
< span class ="date "> (16 July 2025)</ span >
572
572
573
573
@@ -638,12 +638,10 @@ <h1>Open Data Cube Release Tracker</h1>
638
638
639
639
// Extract numeric value for age columns
640
640
if ( sortKey . includes ( "_age_days" ) ) {
641
- aValue = parseFloat ( aValue . split ( " " ) [ 0 ] ) || 0 ; // "22 days ago" -> 22
642
- bValue = parseFloat ( bValue . split ( " " ) [ 0 ] ) || 0 ; // "N/A" -> 0
643
- }
644
-
645
- if ( typeof aValue === 'number' && typeof bValue === 'number' ) {
646
- return currentSortOrder === "asc" ? aValue - bValue : bValue - aValue ;
641
+ // For age columns, get the data-published-at attribute for accurate sorting
642
+ const aDate = new Date ( aCell . querySelector ( '[data-published-at]' ) . dataset . publishedAt ) ;
643
+ const bDate = new Date ( bCell . querySelector ( '[data-published-at]' ) . dataset . publishedAt ) ;
644
+ return currentSortOrder === "asc" ? aDate . getTime ( ) - bDate . getTime ( ) : bDate . getTime ( ) - aDate . getTime ( ) ;
647
645
} else {
648
646
return currentSortOrder === "asc" ? aValue . localeCompare ( bValue ) : bValue . localeCompare ( aValue ) ;
649
647
}
@@ -662,6 +660,26 @@ <h1>Open Data Cube Release Tracker</h1>
662
660
}
663
661
return index + 1 ;
664
662
}
663
+
664
+ // Function to calculate and display days ago
665
+ function calculateAndDisplayAge ( ) {
666
+ const now = new Date ( ) ;
667
+ document . querySelectorAll ( '[data-published-at]' ) . forEach ( element => {
668
+ const publishedAt = new Date ( element . dataset . publishedAt ) ;
669
+ const diffTime = Math . abs ( now - publishedAt ) ;
670
+ const diffDays = Math . floor ( diffTime / ( 1000 * 60 * 60 * 24 ) ) ;
671
+ if ( diffDays === 0 ) {
672
+ element . innerText = "today" ;
673
+ } else if ( diffDays === 1 ) {
674
+ element . innerText = "1 day ago" ;
675
+ } else {
676
+ element . innerText = `${ diffDays } days ago` ;
677
+ }
678
+ } ) ;
679
+ }
680
+
681
+ calculateAndDisplayAge ( ) ; // Initial calculation
682
+ setInterval ( calculateAndDisplayAge , 3600000 ) ; // Update every hour (3600000 ms)
665
683
} ) ;
666
684
</ script >
667
685
< div id ="last-checked-info " style ="text-align: center; margin-top: 20px; font-size: 0.8em; color: #888; "> </ div >
0 commit comments