ls | awk '
match ($0, /[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]\./) {TMP[substr ($0, RSTART, RLENGTH-1)]++
}
END {for (t in TMP) print "zip -umD " t ".zip *" t "*"
}
'
zip -umD 20180627.zip *20180627*
and pipe into sh . The looong regex is due to my mawk doesn't allow for bounds; if yours does, try [0-9]{8} as you did before.
The requestor needs to tell files matching his pattern from others, and remove duplicates.
EDIT: Mayhap like so:
ls *[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9].* |
while read FILE
do FILE="${FILE%.*}"
TMP="${FILE#${FILE%????????}}"
[ ${ARR[$TMP]} ] || echo zip -umD ${TMP}.zip *${TMP}*
ARR[$TMP]=1
done