Why your Canvas due date differs from the syllabus
One Canvas assignment can carry several due dates: one for everyone, and others for particular sections, groups or students. Canvas shows you only the date that applies to you, and grades lateness against that date. So the syllabus, a classmate in another section, and your instructor's screen can all show a different date from yours, and none of them is broken. A date set for you personally wins over your section's date, even when it is earlier. The syllabus itself is text your instructor wrote, and Canvas does not update it when an assignment's date changes. Time zones can also make a late-night deadline show on the next day.
What you see
The syllabus says the essay is due Friday. Canvas says Monday. Or a friend in the other lab section has Wednesday, and you have Tuesday. Or your instructor says in class "it's due on the 12th", and your Canvas says the 14th, because they were reading their own view of the assignment, not yours.
Canvas gives no sign that other dates exist. Your assignment page shows one date, with no note that it is yours alone.
Why it happens
Canvas allows more than one due date per assignment. When an instructor builds an assignment, they can assign it to everyone with one date, or add more dates for particular sections, groups or individual students. Canvas keeps the main date as the "Everyone else" date.
You see the date that applies to you. The assignment page, and the Canvas API that apps use, ask for the assignment as it applies to you, and Canvas works out your date like this:
- A date set for you personally wins. If your instructor gave you your own date, that is your date, even if your section's date is later.
- Otherwise, your section's or group's date. It replaces the Everyone else date, even if it is earlier. A section or group date left blank also replaces it: you get no due date.
- If you are in more than one section or group with a date, the latest one wins. If one of them has its due date left blank, you get no due date.
- Otherwise, the Everyone else date.
Late and Missing follow the same rule. Canvas works out each student's due date this way and stores it with their submission. Unless your instructor sets the status by hand, whether your work counts as late, or as missing, is measured against your date, not the syllabus's. See when Canvas marks work Missing.
Your instructor's view is not yours. Canvas's check for showing "Multiple Due Dates" always says no for a student. An instructor's view can show it, when more than one date is set, and where an instructor sees a single date, it is often the later of the Everyone else date and a section date, which may not be yours. A date read aloud in class may be the one on their screen.
The syllabus is text, and nothing keeps it in step. The text at the top of the Syllabus page is whatever your instructor typed there. Canvas can also list the course's assignments below it, but that list is generated, not typed, and the typed text does not follow it. When an assignment's date changes, the syllabus text does not. When a course is copied into a new term, Canvas can shift the assignments' dates to the new calendar, but in the code we read it does not change dates written in the syllabus text. A syllabus PDF is further still from Canvas.
Time zones can change the day. Every due date is one moment in time. Canvas shows it in the time zone set in your Canvas profile, or your school's default if you have not set one, and a course has its own time zone. A deadline of 11:59 PM in the course's time zone shows as 12:59 AM the next day to a student whose Canvas time zone is an hour ahead. Where Canvas shows it, the date's tooltip lists both times, labeled Local and Course, when they differ. Calendar apps reading a feed have a separate problem: see floating times landing on the wrong day.
What you can check
- Trust the date on the assignment page over the syllabus. It is the date Canvas grades against for you.
- Do not take a classmate's date as yours, unless you are in the same sections and groups and neither of you has a date of your own.
- If you have an accommodation or extension, check that your own date shows on the assignment page. If it does not, Canvas will measure you against the general date.
- Check your time zone in your Canvas account settings, especially if you study away from your school's time zone.
- If the dates disagree and it matters, ask your instructor which one counts. Do it before the earlier date, in writing.
What an instructor or admin can do
- Say on the syllabus that Canvas dates govern, or that section dates may differ, if you use per-section dates.
- Read the assignment's full list of dates before quoting one in class. Your own view does not show a given student's date.
- After copying a course, reread the syllabus text. Assignment dates can be shifted with the copy; dates typed into the syllabus are not.
- Set the course time zone to the school's, and tell students who travel to set theirs.
Evidence
canvas-lms, app/controllers/assignments_controller.rb:338 and lib/api/v1/assignment.rb:141 (master at 1c9f0bb, retrieved 2026-11-02). The assignment page and the assignments API both apply the dates for the person asking:
@assignment = AssignmentOverrideApplicator.assignment_overridden_for(@assignment, @current_user)
assignment = assignment.overridden_for(user)
canvas-lms, lib/assignment_override_applicator.rb:143-162, gathers the dates that apply to a student: their own, then group, section and course dates. The Everyone else date is the assignment's own, used only when none of these sets a due date (:463-476). The choice among them is select_override, :478-493. Its first test picks the student's own date whenever that date sets a due date (others were dropped at :429-436; the only exception, an instructor's lock date, does not apply here). The rest reads:
elsif (override = overrides.detect { |o| o.public_send(attribute).nil? })
override
elsif comparison == :max
overrides.max_by(&attribute)
For due dates the comparison is :max (:435): an individual date first, then a blank date, then the latest.
canvas-lms, lib/effective_due_dates.rb, the per-student date Canvas stores with each submission (lib/submission_lifecycle_manager.rb:225-237, 402). Individual dates have priority 1 (:360), group and section dates 2 (:382, :406), and the Everyone else date 3 (:431-434). Each step picks one row per student in this order (:457, :473, :487):
ORDER BY student_id ASC, assignment_id ASC, active_in_section DESC, due_at_overridden DESC, priority ASC, due_at DESC NULLS FIRST
app/models/submission.rb:2854-2857 measures lateness against that stored date (cached_due_date).
canvas-lms, lib/assignment_override_applicator.rb:47-48, the instructor's view:
# students get the last overridden date that applies to them, but teachers
# should see the assignment's due_date if that is more lenient
and lib/dates_overridable.rb:271-272, the check for "Multiple Due Dates", which always answers no for a student:
def multiple_due_dates_apply_to?(user)
return false if context.user_has_been_student?(user)
canvas-lms, app/helpers/syllabus_helper.rb:21-34. The Syllabus page shows the course's stored syllabus_body. On a course copy, app/models/importers/assignment_importer.rb:747-763 shifts each assignment's due, lock and unlock dates when date shifting is chosen, while app/models/importers/course_content_importer.rb:480-489 passes the syllabus body through the HTML converter, which rewrites links. We found no date shifting of syllabus text.
canvas-lms, app/controllers/application_controller.rb:1189-1203, sets the display time zone to the one in your profile, else the school's default. app/models/course.rb:77-81 gives a course its own time zone. app/helpers/application_helper.rb:802-816 builds the tooltip that reads "Local" and "Course" when the two times differ.