Fossil SCM

Fixes to the yw=YYYYWW query parameter to /timeline

drh 2026-07-01 13:21 UTC trunk
Commit a5a08c3439411681b991615c347b90c8135507c517dcfb13e53fce9b3989475f
1 file changed +9 -7
+9 -7
--- src/timeline.c
+++ src/timeline.c
@@ -2663,26 +2663,26 @@
26632663
int bZulu = 0;
26642664
const char *zTZMod;
26652665
zYearWeek = timeline_expand_datetime(zYearWeek, &bZulu);
26662666
z = db_text(0, "SELECT strftime('%%Y-%%W',%Q)", zYearWeek);
26672667
if( z && z[0] ){
2668
- zYearWeekStart = db_text(0, "SELECT date(%Q,'-6 days','weekday 1')",
2668
+ zYearWeekStart = db_text(0, "SELECT date(%Q,'weekday -1')",
26692669
zYearWeek);
26702670
zYearWeek = z;
26712671
}else{
26722672
if( strlen(zYearWeek)==7 ){
26732673
zYearWeekStart = db_text(0,
2674
- "SELECT date('%.4q-01-01','%+d days','weekday 1')",
2675
- zYearWeek, atoi(zYearWeek+5)*7-6);
2674
+ "SELECT date('%.4q-01-01','weekday 1','%+d days')",
2675
+ zYearWeek, atoi(zYearWeek+5)*7 - 7);
26762676
}else{
26772677
zYearWeekStart = 0;
26782678
}
26792679
if( zYearWeekStart==0 || zYearWeekStart[0]==0 ){
26802680
zYearWeekStart = db_text(0,
2681
- "SELECT date('now','-6 days','weekday 1');");
2681
+ "SELECT date('now','weekday -1');");
26822682
zYearWeek = db_text(0,
2683
- "SELECT strftime('%%Y-%%W','now','-6 days','weekday 1')");
2683
+ "SELECT strftime('%%Y-%%W','now','weekday -1')");
26842684
}
26852685
}
26862686
zTZMod = (bZulu==0 && fossil_ui_localtime()) ? "utc" : "+00:00";
26872687
if( db_int(0,
26882688
"SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob"
@@ -3080,12 +3080,14 @@
30803080
zPlural = n==1 ? "" : "s";
30813081
if( zYearMonth ){
30823082
blob_appendf(&desc, "%d %s%s for the month beginning %h",
30833083
n, zEType, zPlural, zYearMonth);
30843084
}else if( zYearWeek ){
3085
- blob_appendf(&desc, "%d %s%s for week %h beginning on %h",
3086
- n, zEType, zPlural, zYearWeek, zYearWeekStart);
3085
+ char *zEnd = db_text("?","SELECT date(%Q,'weekday 0')",zYearWeekStart);
3086
+ blob_appendf(&desc, "%d %s%s for week %h spanning %h to %h",
3087
+ n, zEType, zPlural, zYearWeek, zYearWeekStart, zEnd);
3088
+ fossil_free(zEnd);
30873089
}else if( zDay ){
30883090
blob_appendf(&desc, "%d %s%s occurring on %h", n, zEType, zPlural, zDay);
30893091
}else if( zNDays ){
30903092
blob_appendf(&desc, "%d %s%s within the past %d day%s",
30913093
n, zEType, zPlural, nDays, nDays>1 ? "s" : "");
30923094
--- src/timeline.c
+++ src/timeline.c
@@ -2663,26 +2663,26 @@
2663 int bZulu = 0;
2664 const char *zTZMod;
2665 zYearWeek = timeline_expand_datetime(zYearWeek, &bZulu);
2666 z = db_text(0, "SELECT strftime('%%Y-%%W',%Q)", zYearWeek);
2667 if( z && z[0] ){
2668 zYearWeekStart = db_text(0, "SELECT date(%Q,'-6 days','weekday 1')",
2669 zYearWeek);
2670 zYearWeek = z;
2671 }else{
2672 if( strlen(zYearWeek)==7 ){
2673 zYearWeekStart = db_text(0,
2674 "SELECT date('%.4q-01-01','%+d days','weekday 1')",
2675 zYearWeek, atoi(zYearWeek+5)*7-6);
2676 }else{
2677 zYearWeekStart = 0;
2678 }
2679 if( zYearWeekStart==0 || zYearWeekStart[0]==0 ){
2680 zYearWeekStart = db_text(0,
2681 "SELECT date('now','-6 days','weekday 1');");
2682 zYearWeek = db_text(0,
2683 "SELECT strftime('%%Y-%%W','now','-6 days','weekday 1')");
2684 }
2685 }
2686 zTZMod = (bZulu==0 && fossil_ui_localtime()) ? "utc" : "+00:00";
2687 if( db_int(0,
2688 "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob"
@@ -3080,12 +3080,14 @@
3080 zPlural = n==1 ? "" : "s";
3081 if( zYearMonth ){
3082 blob_appendf(&desc, "%d %s%s for the month beginning %h",
3083 n, zEType, zPlural, zYearMonth);
3084 }else if( zYearWeek ){
3085 blob_appendf(&desc, "%d %s%s for week %h beginning on %h",
3086 n, zEType, zPlural, zYearWeek, zYearWeekStart);
 
 
3087 }else if( zDay ){
3088 blob_appendf(&desc, "%d %s%s occurring on %h", n, zEType, zPlural, zDay);
3089 }else if( zNDays ){
3090 blob_appendf(&desc, "%d %s%s within the past %d day%s",
3091 n, zEType, zPlural, nDays, nDays>1 ? "s" : "");
3092
--- src/timeline.c
+++ src/timeline.c
@@ -2663,26 +2663,26 @@
2663 int bZulu = 0;
2664 const char *zTZMod;
2665 zYearWeek = timeline_expand_datetime(zYearWeek, &bZulu);
2666 z = db_text(0, "SELECT strftime('%%Y-%%W',%Q)", zYearWeek);
2667 if( z && z[0] ){
2668 zYearWeekStart = db_text(0, "SELECT date(%Q,'weekday -1')",
2669 zYearWeek);
2670 zYearWeek = z;
2671 }else{
2672 if( strlen(zYearWeek)==7 ){
2673 zYearWeekStart = db_text(0,
2674 "SELECT date('%.4q-01-01','weekday 1','%+d days')",
2675 zYearWeek, atoi(zYearWeek+5)*7 - 7);
2676 }else{
2677 zYearWeekStart = 0;
2678 }
2679 if( zYearWeekStart==0 || zYearWeekStart[0]==0 ){
2680 zYearWeekStart = db_text(0,
2681 "SELECT date('now','weekday -1');");
2682 zYearWeek = db_text(0,
2683 "SELECT strftime('%%Y-%%W','now','weekday -1')");
2684 }
2685 }
2686 zTZMod = (bZulu==0 && fossil_ui_localtime()) ? "utc" : "+00:00";
2687 if( db_int(0,
2688 "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob"
@@ -3080,12 +3080,14 @@
3080 zPlural = n==1 ? "" : "s";
3081 if( zYearMonth ){
3082 blob_appendf(&desc, "%d %s%s for the month beginning %h",
3083 n, zEType, zPlural, zYearMonth);
3084 }else if( zYearWeek ){
3085 char *zEnd = db_text("?","SELECT date(%Q,'weekday 0')",zYearWeekStart);
3086 blob_appendf(&desc, "%d %s%s for week %h spanning %h to %h",
3087 n, zEType, zPlural, zYearWeek, zYearWeekStart, zEnd);
3088 fossil_free(zEnd);
3089 }else if( zDay ){
3090 blob_appendf(&desc, "%d %s%s occurring on %h", n, zEType, zPlural, zDay);
3091 }else if( zNDays ){
3092 blob_appendf(&desc, "%d %s%s within the past %d day%s",
3093 n, zEType, zPlural, nDays, nDays>1 ? "s" : "");
3094

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button