diff --git a/src/photo/PhotoDetailPage.tsx b/src/photo/PhotoDetailPage.tsx
index 7b806f25..0ff0677d 100644
--- a/src/photo/PhotoDetailPage.tsx
+++ b/src/photo/PhotoDetailPage.tsx
@@ -41,6 +41,7 @@ export default function PhotoDetailPage({
tag={tag}
photos={photos}
selectedPhoto={photo}
+ dateRange={dateRange}
/>}
/>}
{camera &&
diff --git a/src/photo/PhotoSetHeader.tsx b/src/photo/PhotoSetHeader.tsx
index 1f62dd39..f034a867 100644
--- a/src/photo/PhotoSetHeader.tsx
+++ b/src/photo/PhotoSetHeader.tsx
@@ -60,7 +60,7 @@ export default function PhotoSetHeader({
)}>
{start === end
? start
- : <>{start}
– {end}>}
+ : <>{end}
– {start}>}
]}
/>
diff --git a/src/photo/index.ts b/src/photo/index.ts
index 6bbb8508..d92b35c0 100644
--- a/src/photo/index.ts
+++ b/src/photo/index.ts
@@ -185,16 +185,26 @@ export const descriptionForPhotoSet = (
photoLabelForCount(explicitCount ?? photos.length),
].join(' ');
+const sortPhotosByDate = (
+ photos: Photo[],
+ order: 'ASC' | 'DESC' = 'DESC'
+) =>
+ [...photos].sort((a, b) => order === 'DESC'
+ ? b.takenAt.getTime() - a.takenAt.getTime()
+ : a.takenAt.getTime() - b.takenAt.getTime());
+
export const dateRangeForPhotos = (
photos: Photo[],
explicitDateRange?: PhotoDateRange,
) => {
+ const photosSorted = sortPhotosByDate(photos);
+
const start = formatDateFromPostgresString(
- explicitDateRange?.start ?? photos[0].takenAtNaive,
+ explicitDateRange?.start ?? photosSorted[photos.length - 1].takenAtNaive,
true,
);
const end = formatDateFromPostgresString(
- explicitDateRange?.end ?? photos[photos.length - 1].takenAtNaive,
+ explicitDateRange?.end ?? photosSorted[0].takenAtNaive,
true
);
const description = start === end
diff --git a/src/services/postgres.ts b/src/services/postgres.ts
index 03cd5700..59a1bf06 100644
--- a/src/services/postgres.ts
+++ b/src/services/postgres.ts
@@ -202,7 +202,7 @@ const sqlGetPhotosByTag = (
SELECT * FROM photos
WHERE ${tag}=ANY(tags)
AND hidden IS NOT TRUE
- ORDER BY taken_at ASC
+ ORDER BY taken_at DESC
LIMIT ${limit}
`;
@@ -226,7 +226,7 @@ const sqlGetPhotosBySimulation = async (
SELECT * FROM photos
WHERE film_simulation=${simulation}
AND hidden IS NOT TRUE
- ORDER BY taken_at ASC
+ ORDER BY taken_at DESC
LIMIT ${limit}
`;
diff --git a/src/tag/TagHeader.tsx b/src/tag/TagHeader.tsx
index 36ffc44c..7d63ed21 100644
--- a/src/tag/TagHeader.tsx
+++ b/src/tag/TagHeader.tsx
@@ -1,4 +1,4 @@
-import { Photo } from '@/photo';
+import { Photo, PhotoDateRange } from '@/photo';
import PhotoTag from './PhotoTag';
import { descriptionForTaggedPhotos } from '.';
import { pathForTagShare } from '@/site/paths';
@@ -9,11 +9,13 @@ export default function TagHeader({
photos,
selectedPhoto,
count,
+ dateRange,
}: {
tag: string
photos: Photo[]
selectedPhoto?: Photo
count?: number
+ dateRange?: PhotoDateRange
}) {
return (
);
}