bugfix: corrected week calculation (iso)

This commit is contained in:
2025-06-12 14:57:36 +02:00
parent 7549acb20c
commit cdc008e361
2 changed files with 29 additions and 19 deletions

View File

@@ -1,17 +1,27 @@
BEGIN { FS="|"; i=0; dlt = -259200; spw = 604800; } BEGIN { FS="|" }
NR == FNR { NR == FNR {
i = i + 1; i = i + 1;
from[i] = int(($1 + dlt)/ spw); from_year[i] = $1
from_week[i] = $2
getline; getline;
to[i] = int(($1 + dlt) / spw); to_year[i] = $1
to_week[i] = $2
next next
} # Load start and end week numbers from first file } # Load start and end week numbers from first file
{ {
if (from[FNR] > to[FNR]) year_i = from_year[FNR]
print "FNR", FNR, ":", from[FNR],"-",to[FNR], " ",$0; week_i = from_week[FNR]
for(i=from[FNR]; i<=to[FNR]; i++) { year_end = to_year[FNR]
week[i] = week[i] " " $5 week_end = to_week[FNR]
while(year_i <= year_end && (year_i < year_end || week_i <= week_end)) {
label = year_i"|"week_i
week[label] = week[label] " " $5
week_i++
if (week_i > 53) {
week_ = 1
year_i++
} }
} }
END { for (i in week) print i week[i]; } }
END { for (label in week) print label week[label]; }

View File

@@ -144,15 +144,14 @@ __load_approx_data() {
__load_weeks() { __load_weeks() {
dates=$(awk -F'|' '{ print $2; print $3 }' "$APPROX_DATA_FILE") dates=$(awk -F'|' '{ print $2; print $3 }' "$APPROX_DATA_FILE")
file_dates=$(mktemp) file_dates=$(mktemp)
echo "$dates" | date --file="/dev/stdin" +"%s" >"$file_dates" echo "$dates" | date --file="/dev/stdin" +"%G|%V" >"$file_dates"
awk "$AWK_MERGE" "$file_dates" "$APPROX_DATA_FILE" awk "$AWK_MERGE" "$file_dates" "$APPROX_DATA_FILE"
rm "$file_dates" rm "$file_dates"
} }
__show_day() { __show_day() {
weeknr=$(date -d "$DISPLAY_DATE" +"%s") weeknr=$(date -d "$DISPLAY_DATE" +"%G.%V")
weeknr=$(((weeknr - 259200) / 604800)) # shift, because epoch origin is a Thursday files=$(grep "^$weeknr\ " "$WEEKLY_DATA_FILE" | cut -d " " -f 2-)
files=$(grep "^$weeknr " "$WEEKLY_DATA_FILE" | cut -d " " -f 2-)
# Find relevant files in list of week files # Find relevant files in list of week files
sef=$({ sef=$({
set -- $files set -- $files
@@ -199,9 +198,8 @@ __show_day() {
} }
__list() { __list() {
weeknr=$(date -d "$DISPLAY_DATE" +"%s") weeknr=$(date -d "$DISPLAY_DATE" +"%G.%V")
weeknr=$(((weeknr - 259200) / 604800)) # shift, because epoch origin is a Thursday files=$(grep "^$weeknr\ " "$WEEKLY_DATA_FILE" | cut -d " " -f 2-)
files=$(grep "^$weeknr " "$WEEKLY_DATA_FILE" | cut -d " " -f 2-)
dayofweek=$(date -d "$DISPLAY_DATE" +"%u") dayofweek=$(date -d "$DISPLAY_DATE" +"%u")
delta=$((1 - dayofweek)) delta=$((1 - dayofweek))
startofweek=$(date -d "$DISPLAY_DATE -$delta days" +"%D") startofweek=$(date -d "$DISPLAY_DATE -$delta days" +"%D")
@@ -388,6 +386,7 @@ if [ "${1:-}" = "--new" ]; then
if awk -v uid="$uuid" "$AWK_NEW" "$filetmp" >"$filenew"; then if awk -v uid="$uuid" "$AWK_NEW" "$filetmp" >"$filenew"; then
mv "$filenew" "$fpath" mv "$filenew" "$fpath"
__refresh_data __refresh_data
start=$(awk -v field="DTSTART" "$AWK_GET" "$fpath" | grep -o '[0-9]\{8\}')
else else
rm -f "$filenew" rm -f "$filenew"
err "Failed to create new entry. Press <enter> to continue." err "Failed to create new entry. Press <enter> to continue."
@@ -395,6 +394,7 @@ if [ "${1:-}" = "--new" ]; then
fi fi
fi fi
rm "$filetmp" rm "$filetmp"
set -- "--day" "$start"
fi fi
if [ -z "${APPROX_DATA_FILE:-}" ]; then if [ -z "${APPROX_DATA_FILE:-}" ]; then
@@ -473,8 +473,8 @@ if [ "${1:-}" = "--preview" ]; then
fi fi
month_previous() { month_previous() {
month="$1" month=$(echo "$1" | sed 's/^0//')
year="$2" year=$(echo "$2" | sed 's/^0//')
if [ "$month" -eq 1 ]; then if [ "$month" -eq 1 ]; then
month=12 month=12
year=$((year - 1)) year=$((year - 1))
@@ -485,8 +485,8 @@ month_previous() {
} }
month_next() { month_next() {
month="$1" month=$(echo "$1" | sed 's/^0//')
year="$2" year=$(echo "$2" | sed 's/^0//')
if [ "$month" -eq 12 ]; then if [ "$month" -eq 12 ]; then
month=1 month=1
year=$((year + 1)) year=$((year + 1))