Bangle.js 2 is quite inaccurate and needs sync several times per day.
Currently error is already over 3s and it's been well under 24 hours.
this is something that can be hopefully improved
bluetooth uses 32kHz crystal with 20PPM accuracy https://github.com/espruino/Espruino/blob/master/targets/nrf5x/bluetooth.c#L2401
that means according to https://www.best-microcontroller-projects.com/ppm.html accuracy of 1.73 seconds per day. I think the RTC that can keep time can use this crystal as a clock source too. Not sure if it currently does and where currently the time value comes from. So unless you reboot the watch which spends some unaccounted time in bootloader (where the hardware including RTC may be reset and disabled) it should/could be accurate.
EDIT: here https://github.com/espruino/Espruino/blob/master/targets/nrf5x/jshardware.c#L1006 it looks like the same time source is used so not sure why it would be so inaccurate (unless you rebooted the watch)
According to  Bangle.js 2 doesn't support getting time from Gadgetbridge.
Also  says that "sync time" only syncs when watch gets connected to phone, which is not enough. Bangle.js 2 is quite inaccurate and needs sync several times per day.