Time: il y a, ça fait, depuis
Summary
il y a + duration means 'ago' — a finished point in the past: « il y a deux ans » (two years ago). il y a … que and ça fait … que + the PRESENT express a duration still going on now, exactly like depuis: « Ça fait deux ans que j'habite ici » = « J'habite ici depuis deux ans » (I have lived here for two years). French uses the present for the ongoing case where English uses the present perfect.
Explanation
French has two very different time constructions that both use the word for a length of time, and telling them apart is the whole point of this rule. One locates a finished event at a point in the past ('ago'); the other measures a stretch of time that is still going on ('for / since'). English keeps them apart with different tenses; French keeps them apart with different frames.
For 'ago', French uses il y a + duration, and it refers to a completed moment in the past: « Je suis arrivé il y a deux ans » (I arrived two years ago), « Il a téléphoné il y a cinq minutes » (he called five minutes ago). The verb is in a past tense (usually the passé composé), because the action is over. Here il y a is fixed — it does not change with the subject and has nothing to do with 'there is'.
For a duration that runs from the past up to now, French uses three interchangeable frames with the PRESENT tense: depuis + duration, ça fait + duration + que, and il y a + duration + que. All three say the same thing: « J'habite ici depuis deux ans » = « Ça fait deux ans que j'habite ici » = « Il y a deux ans que j'habite ici », all meaning 'I have lived here for two years (and still do)'. Note that ça fait … que and il y a … que come first, before the clause, whereas depuis follows the verb.
The tense is the trap. Because the situation is still true, French puts the verb in the PRESENT, even though English uses the present perfect ('I have lived', 'I have been waiting'). « J'attends depuis une heure » = 'I have been waiting for an hour' (and I'm still waiting). Translating word for word with a French past tense — « j'ai attendu depuis une heure » — is wrong and would break the 'still ongoing' meaning.
So the same phrase, « deux ans », points in opposite directions depending on the frame. « Il y a deux ans » on its own = 'two years ago' (finished, past verb). « Depuis deux ans » / « ça fait deux ans que » / « il y a deux ans que » = 'for the last two years' (ongoing, present verb). The little word que is what flips il y a from 'ago' to 'for': with que it introduces a still-running situation.
Rule of thumb: if the action is over and you mean 'ago', use il y a + duration with a past tense and no que. If the action is still going on and you mean 'for / since', use depuis, ça fait … que or il y a … que with the PRESENT. When in doubt, test whether the situation is still true now — if it is, stay in the present.
Examples
Je suis arrivé à Paris il y a deux ans. — I arrived in Paris two years ago. ('ago': il y a + duration with a past tense (finished event).)
Ça fait deux ans que j'habite ici. — I have been living here for two years. (Ongoing: ça fait … que + PRESENT (still true now).)
J'habite ici depuis deux ans. — I have lived here for two years. (Same meaning as the ça fait sentence; depuis follows the verb, verb in the present.)
Il y a longtemps qu'on ne s'est pas vus. — It's been a long time since we last saw each other. (il y a … que = ongoing duration up to now (contrast with bare 'il y a' = ago).)
Nous attendons le bus depuis vingt minutes. — We have been waiting for the bus for twenty minutes. (Present tense in French where English uses the present perfect continuous.)
Elle a fini ses études il y a six mois. — She finished her studies six months ago. ('ago' again: completed action, so il y a + past tense, no que.)
Common mistakes
J'habite ici il y a deux ans.
J'habite ici depuis deux ans.
Il y a + duration means "ago" and points to a finished past event, so it clashes with the present tense habite, which shows the living arrangement is still ongoing. For a duration that continues up to now, French uses depuis (or ça fait … que / il y a … que) with the PRESENT: J'habite ici depuis deux ans (I have lived here for two years).
Prerequisites
Related rules
timedurationtense-choicedepuis