Extra time on a Canvas quiz still ends at “Available until”
In a Canvas Classic Quiz, extra time adds minutes to your time limit, but it does not move the quiz's "Available until" date. When you start, Canvas works out when your attempt ends: your start time, plus the time limit, plus your extra time. If the quiz closes before then, your attempt ends when the quiz closes. So a student with time and a half on a one-hour quiz who starts an hour before it closes gets an hour, the same as everyone else. The fix is on the instructor's side: a later "Available until" date for that student, or unlocking the quiz for them.
What you see
You have extra time on tests, and your instructor has added it in Canvas. The quiz has a 60-minute limit and closes at 11:59 p.m. You start at 11:00 p.m., expecting 90 minutes. At 11:59 the attempt ends, after 59.
Nothing was set up wrong, exactly. The extra time is there. It is the closing date that wins.
Why it happens
When a Classic Quiz attempt starts, Canvas sets an end time for it. The calculation is in Canvas's source and runs in this order:
- Start with the time you started, plus the quiz's time limit.
- Add the extra time set for you.
- If the quiz has an "Available until" date, and the quiz has not been unlocked for you, and that date comes first, the end time becomes that date.
Step 3 does not look at why the end time was later. Extra time is treated like any other minutes past the closing time. The "Available until" date in step 3 is the one that applies to you: if your instructor gave you a date of your own, that is the one used.
Two details matter for planning. Extra time is set for you and applies to every attempt. Unlocking the quiz for you is different: Canvas clears it when it grades an attempt, so it covers the next attempt, not the ones after.
What you can check
- Look at the quiz's "Available until" date before you start, and count back. If the closing time is less than your full time away, you will not get your full time.
- Start early enough, where that is possible, so the closing time is not the limit.
- If the timer shows less than you expected, note the time you started and the time it ended. That is what your instructor or your disability services office will need.
- Ask before the quiz, not after. Canvas works out your end time when the attempt begins, so a later closing date is safest set before you start.
What an instructor or admin can do
- Give the student a later "Available until" date as well as extra time. In Canvas this is an individual date for that student on the quiz; the end time uses the date that applies to them.
- Or unlock the quiz for that student. With the quiz unlocked for them, the closing date does not cap their end time. Canvas clears the unlock once an attempt is graded, so it covers one attempt at a time.
- Set extra time and dates together. Extra time alone is enough only when students are sure to start early, which a quiz open until midnight does not ensure.
- Disability services offices that write accommodations as "time and a half" may want to note that in Canvas this takes two settings on a quiz with a closing date, not one.
Evidence
canvas-lms, app/models/quizzes/quiz.rb:720-732 (master at 1c9f0bb, retrieved 2026-11-01). The end time is the start time plus the time limit, then plus your extra time:
def build_submission_end_at(submission, with_time_limit: true)
course = context
user = submission.user
end_at = nil
if time_limit && with_time_limit
end_at = submission.started_at + (time_limit.to_f * 60.0)
end
# add extra time
if end_at && submission.extra_time
end_at += (submission.extra_time * 60.0)
end
canvas-lms, app/models/quizzes/quiz.rb:741-745, under the comment # set to lock date. When the quiz has a lock date (lock_at, "Available until") and the submission is not manually_unlocked, the lock date replaces the end time if there is no end time or the lock date comes first (lock_at < end_at, then end_at = lock_at). Graders skip this step (:735).
The end time is set when an attempt starts (generate_submission, :778). Before that, app/controllers/quizzes/quizzes_controller.rb:232 replaces the quiz with the version for the current student, @quiz = @quiz.overridden_for(@current_user), so lock_at is the date that applies to that student.
canvas-lms, app/controllers/quizzes/quiz_extensions_controller.rb:81-87, the API's description of the two settings: extra time is "The number of extra minutes to allow for all attempts. This will add to the existing time limit on the submission"; manually_unlocked will "Allow the student to take the quiz even if it's locked for everyone else."
canvas-lms, app/models/quizzes/submission_grader.rb:51, when an attempt is graded:
@submission.manually_unlocked = nil