Days marked as non-working on the Calendars that are users are assigned to, show as gray in timesheets - no customizing required. Saturday and Sunday are already marked as "Non-Workday (Base Calendar)"; in screenshots below, May 28th is marked as "Non-Workday (Exception)" for our holiday.
Have you identified your holidays on our calendar(s)? We're global, so we have many calendars to keep updated.