Há for Time Expressions

One of the quietest but most useful pieces of Portuguese grammar is the way the tiny verb form does double duty in time expressions. It can mean "ago"há dois anos = "two years ago" — and it can mean "for / since"há dois anos = "for two years (and still going)." Same words, two meanings. The difference is carried entirely by the tense of the main verb in the sentence. This page maps both uses, shows the logic, and addresses the biggest trap for English and Spanish speakers: Portuguese uses the present tense (not the perfect) for "have been doing X for Y time."

The two uses at a glance

MeaningMain verb tenseLogic
"ago"Preterite (completed past)A moment in the past, done and bounded.
"for / since" (still ongoing)PresentA state or action that began in the past and is still true now.

The phrase há dois anos is identical in both cases. What changes is the verb it attaches to.

Fui a Portugal há dois anos.

I went to Portugal two years ago. (preterite fui → 'ago')

Estudo português há dois anos.

I've been studying Portuguese for two years. (present estudo → 'for, still ongoing')

Two sentences, same há dois anos, completely different time meanings. Portuguese just reuses one expression and lets the verb tense do the work.

Há = "ago" (with past tense)

When há + time phrase appears with a verb in the preterite (or another bounded past tense), it means "ago." The event happened, it is finished, it took place a certain amount of time before now.

Mudei-me para Lisboa há cinco anos.

I moved to Lisbon five years ago.

Acabei de ler aquele livro há uma semana.

I finished reading that book a week ago.

Ele telefonou há dez minutos.

He called ten minutes ago.

A carta chegou há três dias, mas só a li hoje.

The letter arrived three days ago, but I only read it today.

Position: há first, or time phrase first

The expression is usually placed after the main verb:

  • Fui a Portugal há dois anos. ("I went to Portugal two years ago.")

But it can also lead the sentence, for emphasis on the time:

  • Há dois anos, fui a Portugal. ("Two years ago, I went to Portugal.")

Both are correct; the initial-position version is more common in writing, particularly in narrative or when setting a temporal scene.

Há muitos anos, morava aqui um pintor famoso.

Many years ago, a famous painter lived here. (emphatic, narrative)

Há = "for / since" (with present tense — still ongoing)

This is the trap. When há + time phrase appears with a verb in the present tense, it expresses a duration that began in the past and is still true right now. English translates this as "for X time" or sometimes "since X time" — but crucially, English uses the present perfect ("I have been doing") for this meaning. Portuguese uses the bare present.

Portuguese: Present + + duration = "I have been doing X for Y time (and still do)."

Moro aqui há três anos.

I've lived here for three years. (moro = present; the three years are ongoing)

Trabalho nesta empresa há quinze anos.

I've worked at this company for fifteen years.

Estudamos português há seis meses.

We've been studying Portuguese for six months.

Não o vejo há semanas.

I haven't seen him for weeks.

In every one of these, the Portuguese verb is in the present, but the English translation uses the present perfect (have lived, have worked, have been studying, have not seen). The logic is different in each language:

  • English — uses the perfect because the duration covers past plus present.
  • Portuguese — uses the present because, from the Portuguese perspective, the state is current. You live here now; you have been living here for three years. The three years is just a modifier.
💡
The biggest rewiring for English speakers learning this: forget the English tense and ask, "Is this still happening?" If yes, use the Portuguese present + . If no, use the Portuguese preterite + . English tense is not your guide; ongoing-ness is.

The critical contrast

Let the same duration (há três anos) appear with both tenses, so the distinction is visible:

Moro em Lisboa há três anos.

I've lived in Lisbon for three years. (I still live there)

Morei em Lisboa há três anos.

I lived in Lisbon three years ago. (I no longer live there)

Há três anos is identical. Moro (present) vs morei (preterite) carries the entire meaning difference. This is not a subtle nuance — it is a hard semantic split.

Negative "for / since": não + present + há

The negative version is a particular idiom in EP: não + present tense + + duration means "I haven't done X for / since Y time."

Não fumo há dez anos.

I haven't smoked for ten years.

Não lhe telefono há meses.

I haven't called him in months.

Não vou ao ginásio há tanto tempo que já perdi a conta.

I haven't been to the gym in so long I've lost track.

Note the present tense in Portuguese (não fumo, não vou) where English uses the present perfect (I haven't smoked, I haven't been). Same logic: the state of "not doing X" is ongoing right now.

The tenho feito trap

A common mistake — especially for English speakers whose instinct is to use a "have been doing" tense — is to reach for the present perfect compound (tenho + participle) with for the "for" meaning. Do not do this. It produces a sentence that is either wrong or means something quite different.

❌ Tenho estudado português há três anos.

Awkward / wrong for 'I've been studying Portuguese for three years.' Use the simple present.

✅ Estudo português há três anos.

I've been studying Portuguese for three years.

Why doesn't tenho estudado work here? Because in EP, tenho estudado has a specific meaning: iterative, repeated recently ("I've been studying [recently, off and on, in bursts]"). Adding há três anos ("for three years") clashes with that meaning — it tries to stretch the "recent repeated" tense across a three-year span, which is not what tenho estudado is for.

The clean way to say "I've been studying Portuguese for three years" is: estudo português há três anos. Present tense, plain and simple.

💡
Use tenho estudado when the emphasis is recency and repetition ("I've been studying a lot these days"). Use estudo + há when the emphasis is duration from past to now ("I've been studying for X time"). These are two different tools.

Desde and desde há

Portuguese has two more ways to express "since":

  • Desde
    • a specific time point = "since [then]": desde 2010 ("since 2010"), desde ontem ("since yesterday"), desde o Natal ("since Christmas").
  • Desde há
    • duration = "since [a period of] X": desde há três anos ("for / since the past three years"). Slightly formal.

Moro aqui desde 2018.

I've lived here since 2018. (specific year)

Não o vejo desde o Verão passado.

I haven't seen him since last summer. (specific past time)

Desde há três anos que trabalho com ele.

For the past three years I've been working with him. (formal — slightly literary)

The desde há construction is perfectly correct but sounds a touch elevated compared to the bare há três anos. In everyday speech, most EP speakers would say trabalho com ele há três anos, not desde há três anos.

A variant with que: há três anos que trabalho com ele = "it's been three years that I've been working with him." Some speakers prefer this inversion, especially in writing.

Há três anos que estudo português.

It's been three years that I've been studying Portuguese. (= Estudo português há três anos. Slight emphasis on the duration.)

Comparison with Spanish

Spanish handles these meanings with a different construction: hace (not hay). And Spanish tends to pair it with a que clause or a desde hace phrase.

MeaningSpanishEuropean Portuguese
"two years ago"hace dos añoshá dois anos
"for two years (still going)"hace dos años que + present, or desde hace dos añoshá dois anos + present (bare)

Hace dos años que estudio portugués. / Estudio portugués desde hace dos años.

Spanish: I've been studying Portuguese for two years.

Estudo português há dois anos.

Portuguese: I've been studying Portuguese for two years. (no que, no desde — just há)

If you know Spanish, the key simplifications for Portuguese are:

  • Use , not hace.
  • Do not add a que clause, though you may optionally invert (há dois anos que estudo português).
  • Do not use desde
    • present; that is not idiomatic EP.

Spanish speakers often over-import the que clause. You can say há dois anos que estudo português — it is correct — but the bare estudo português há dois anos is more typical.

Comparison with English

English relies on:

  • "ago" after the duration: two years ago (bounded past, uses simple past tense).
  • "for" before the duration, with present perfect: I have lived here for two years (ongoing, uses present perfect).
  • "since" before a time point: since 2018 (ongoing, uses present perfect).

Portuguese collapses the first two into a single expression (há dois anos) and lets the verb tense do the distinguishing. It uses desde for the third (desde 2018).

EnglishPortuguese
I moved here two years ago.Mudei-me para aqui há dois anos.
I have lived here for two years.Moro aqui há dois anos.
I have lived here since 2018.Moro aqui desde 2018.

The single biggest English-speaker mistake: reaching for the present perfect compound (tenho morado) in the second row. EP uses the simple present.

Less common: há tempo and há muito

A few idiomatic uses of + vague time expression worth knowing:

Não falo com ele há tempos.

I haven't spoken to him in ages. (vague: 'a long while')

Há muito que não vinha aqui.

I hadn't been here in a long time. (há muito = 'a long time ago / for a long time')

Já há algum tempo que ando a pensar nisso.

I've been thinking about that for some time now.

Há tempos, há muito (tempo), há anos (used vaguely, "for years") are all set time markers meaning something like "a long while, I don't know exactly when."

Common Mistakes

❌ Tenho morado em Lisboa há três anos.

Wrong tense — for an ongoing duration, use the simple present (moro), not the compound present perfect (tenho morado).

✅ Moro em Lisboa há três anos.

I've lived in Lisbon for three years.

❌ Desde três anos estudo português.

Not idiomatic — for durations (not specific start points), use há.

✅ Estudo português há três anos.

I've been studying Portuguese for three years.

❌ Há três anos que eu fui a Portugal.

Mixed signals — the preterite fui wants há três anos as 'ago,' not 'for.' Drop the que clause.

✅ Fui a Portugal há três anos.

I went to Portugal three years ago.

❌ Hace dois anos que moro aqui.

Spanish leaking through — EP uses há, not hace.

✅ Moro aqui há dois anos.

I've lived here for two years.

❌ Para três anos moro em Lisboa.

Wrong preposition — 'for [duration]' with existing state is há, not para.

✅ Moro em Lisboa há três anos.

I've lived in Lisbon for three years.

Key Takeaways

    • time phrase means "ago" when the main verb is in the past (fui há dois anos, "I went two years ago").
    • time phrase means "for / since" when the main verb is in the present (moro aqui há dois anos, "I've lived here for two years").
  • Do not use the present perfect compound (tenho morado) with for ongoing duration. Use the simple present.
  • Desde introduces a specific time point (desde 2018, "since 2018"); introduces a duration (há três anos, "for three years" or "three years ago").
  • Spanish hace maps onto Portuguese — but Portuguese does not need the que clause that Spanish often uses.
  • The construction há três anos que... exists in Portuguese and is correct, just slightly more emphatic / formal than the bare há três anos after the verb.

For the existential use of ("there is / there are"), see Haver as Existential.

Related Topics