I'm assuming you want all the dates between the first and last date return even if it doesn't exists in the table. There are a few ways available depending on your MySQL version but since older versions provide more steps (and most have already migrated to newer version), I'll post a suggestion for newer MySQL (or MariaDB) version that supports window function.
If you are on latest MySQL version or at least v8+ (OR if you are on MariaDB v10.2 and above), you can use common table expression function to custom generate the date range based on the data you have:
WITH RECURSIVE cte AS (
SELECT employee_id, DATE_FORMAT(MIN(date), '%Y-%m-01') AS dt,
MIN(date) AS mndt FROM tbl_attendance
GROUP BY employee_id
UNION ALL
SELECT employee_id, dt+INTERVAL 1 DAY, mndt FROM cte
WHERE dt+INTERVAL 1 DAY <= LAST_DAY(mndt))
SELECT cte.employee_id,
cte.dt,
t.date
FROM cte
LEFT JOIN tbl_attendance t
ON cte.dt=t.date
Here's a demo
For older versions, you may want to consider creating a calendar table using methods posted in this question count saturdays before 15 date as working days and skip others