since、for 和 ago:决定你用什么时态的三个词
"I live here since 2019" 是错的,问题不在 since 这个词——在动词。这三个时间词如何强行规定你的时态,外加 30 个改正过的句子。

1时间词不是装饰
大多数学习者把 since、for、ago 当成词汇——三个词三个意思,背下来就翻篇。这恰恰漏掉了它们真正难的地方。
这三个词不只是往句子里加信息,它们会**限制时态**。先挑时间词、再独立地挑时态,那些经典错误就是这么产生的。
"I live here since 2019" 就是个好例子。since 用得没错——2019 确实是起点。错的是:since 要求一个完成时,而 live 是一般现在时。学习者挑对了词、配错了动词,句子就塌了。
所以最好用的思路是把它们看成下给动词的指令。since 说:用完成时。ago 说:用一般过去时。for 什么都不说,所以它最灵活,也因此是另一类错误的源头。
改这三句:(a) I know her since 2015. (b) I have finished it two hours ago. (c) I am here for two hours.
(a) I have known her since 2015——since 要求完成时。(b) I finished it two hours ago——ago 要求一般过去时。(c) I have been here for two hours——for 两种都允许,但这里的意思是你还在那儿,所以必须用完成时。
Tip: 如果只改一样,就改 since。它是三者中出现频率最高的错误,而且往往在你聊自己生活的头一分钟里就冒出来。
2since:起点
since 回答的是"从什么时候开始",也是三者中最死板的一个。
since + 一个时间**点**,不是一段时长。since 2019, since Monday, since March, since I was a child, since breakfast, since we last met。
关键的检验是:since 后面那个东西,能不能在日历或钟表上标出来。2019 是个点,Monday 是个点。"六年"不是点——它是一段长度——所以 "since six years" 在任何语境下都是错的。
- I have lived here since 2019. — correct, a point
- I have lived here since six years. — wrong, that is a length
- She has been ill since Tuesday. — correct
- We haven't spoken since the wedding. — correct, an event as a point
- I have known him since we were at school. — correct, a clause
since 几乎总会拽出一个完成时:现在完成时、现在完成进行时,或过去完成时。"I live here since 2019" 和 "I am living here since 2019" 错在同一处——两句都不是完成时。
这种绑定可靠到可以当成自查工具:写下 since 之后,如果动词里没有 have、has 或 had,就回头再看一眼。
Tip: since 后面也可以跟一整个用过去时的从句:"since I moved here"、"since she left"。主句动词仍然要用完成时:"I have been happier since I moved here."
3for:持续的长度
for 回答"多久",是三者中最灵活的一个——这让它既更容易,也更危险。
for + 一段**时长**。for two hours, for six years, for a long time, for ages, for a moment, for the whole afternoon。
和 since 不同,for 几乎能配任何时态。方便的同时也藏着一个陷阱:你选的时态决定了这段时间有没有结束,而学习者常常选完了都没意识到自己刚做了这个决定。
- I worked there for five years. — past simple, I don't work there now
- I have worked there for five years. — present perfect, I still do
- I had worked there for five years before I left. — past perfect
- I will be there for two hours. — future
- I am staying for three days. — present continuous, arranged
真正要紧的是前两句。一样的词、一样的时长,在职状态却相反。在面试里搞错这个,产生的不是语法错误——是一句关于你职业经历的假话。
口语里 for 有时会跟某些时长一起被省掉:"I've been here two hours" 自然而且正确。这是可选省略,不是错误,但写作时别省。
Tip: for all my life、for the first time 和 for now 是值得随手备着的固定搭配,它们都不会有意外表现。
4ago:从现在往回数
ago 是三者中最机械的一个,时态规则也最严。
时长 + ago,并且要用**一般过去时**。two hours ago, three days ago, a long time ago, ten years ago。
注意语序。ago 放在时间表达**之后**,不是之前:"two hours ago",绝不是 "ago two hours"。母语把对应词放在前面的人常在这里翻车,值得专门练,因为语序错了别人一耳朵就听得出来。
- I saw him two days ago. — correct
- I have seen him two days ago. — wrong, ago forbids the perfect
- I ago two days saw him. — wrong word order
- She left a moment ago. — correct
- How long ago did you arrive? — correct question form
ago 和现在完成时永远不能同时出现。ago 指向过去一个已经关闭的时刻,而现在完成时要求一个仍然敞开的时段——两者互相矛盾。"I have finished it two hours ago" 在任何一种英语里都是错的。
如果要从**过去**的某个点往回数,而不是从现在往回数,英语用 before 或 earlier:"He had left two hours before." ago 锚在此刻;before 锚在过去的某一刻。
Tip: ago 是三者中最容易用对的,因为规则没有例外:时长在前,ago 在后,动词用一般过去时。
5每个词强制的时态
整个体系压缩在这里。如果这篇文章你只背一张表,就背这张。
- since + point → present perfect (or past perfect) — I have lived here since 2019
- for + duration → any tense; the tense decides if it is over — I lived / I have lived
- ago + duration → past simple, never the perfect — I arrived two hours ago
- in + duration → future — I'll be there in ten minutes
- during + noun → any tense — I slept during the film
- by + point → deadline, often perfect — I'll have finished by six
死板的两行是 since 和 ago,而且它们指向相反:since 强制完成时,ago 禁止完成时。这个对立值得留意,因为它意味着 since 和 ago 永远不会出现在同一个分句里。
for 是唯一真正自由的一个,而这份自由正是它产生更隐蔽错误的原因。没人会用 for 写出不合语法的句子;人们写出的是合语法但说错事实的句子。
in 常和 ago 混淆,因为两者都接时长。但 in 指向前方——"in two hours" 是从现在起两小时后——而 ago 指向后方。"I'll finish in two hours" 和 "I finished two hours ago" 是相反的两个方向。
Tip: 专门测一测 since/ago 这组对立:since 要 have,ago 不许有 have。这一对变成本能之后,这个主题基本就过关了。
6作连词而非介词的 since
since 还有第二份工作,和时间毫无关系;把时间规则练得很熟的学习者遇到它反而会犯迷糊。
since 也表示"因为":"Since you're here, could you help me?" "Since it was raining, we stayed in." 这是原因,不是起点,而且它对时态完全没有要求。
- Since 2019 I have lived here. — time
- Since you asked, I'll tell you. — reason
- Since he was late, we started without him. — reason
- Since he left, nothing has been the same. — time
实际操作里区分很容易:如果把 since 换成 because 句子仍然通顺,那就是原因义;如果能换成 from,那就是时间义。上面第三句和第四句结构看着一模一样,用这个检验就干净利落地分开了。
原因义的 since 比 because 略正式一些,书面语里很常见。它还倾向于引出听者已知的信息,而 because 引出新信息。这个层次很微妙、很少要紧,但它解释了为什么 "Since you're busy, I'll do it" 听着自然,而 "Because you're busy, I'll do it" 听着略沉重。
Tip: 这是英语里少数几处歧义几乎从不惹真麻烦的地方。语境瞬间就把它解决了,母语者甚至不觉得这里存在歧义。
7for 配一般过去时:大多数人漏掉的情况
很多学习者被教了一句"for 配现在完成时"就到此为止。那只是一半的事实,而缺的那一半会造成真正的误会。
for + 一般过去时描述一段已经结束的时期;for + 现在完成时描述一段仍在继续的时期。两者都对,只是意思不同。
- I lived in Berlin for six years. — I don't live there now
- I have lived in Berlin for six years. — I still do
- She studied Spanish for two years. — she stopped
- She has studied Spanish for two years. — she is still studying
- We waited for an hour. — the waiting ended
- We have been waiting for an hour. — we are still waiting
看最后一对。"We waited for an hour" 是事后讲故事时说的。"We have been waiting for an hour" 是你还站在那儿时说的,通常带点不耐烦。决定你需要哪一句的是处境,不是语法。
这里的错误并不违反语法,所以没人会纠正你。如果你三年前就离职了却说 "I have worked at Google for five years",听的人会以为你现在还在那儿,而句子里没有任何东西会提醒他们。
这是"通过情境而不是通过表格学时态"最有力的论据。表格说两句都对,只有情境能说出哪一句是真的。
Tip: 说一句关于自己的 for 句子之前,先问一句:这段时间还在继续吗。这一秒钟的自查能挡掉整整一类错误。
8before、from 和 until
另外三个挨得很近、常被混进来的时间词。
from 和 since 一样标记开始,但它不要求完成时,而且通常和 to 或 until 搭配:"I worked there from 2015 to 2019." 当这段时间延续到现在时用 since;当你要把一段已结束时期的两头都说出来时用 from。
"I waited until six." "He won't arrive until Friday." until 标记事情停止的位置。常见错误是拿它表时长:"I waited until two hours" 是错的,你要的是 "I waited for two hours."
"I'll call before six." 它同时充当 ago 的"过去锚点"版本:"He had arrived two hours before." ago 从现在往回数;before 从故事里的某一刻往回数。
- I worked there from 2015 to 2019. — finished period, both ends named
- I have worked there since 2015. — still there
- I waited until six. — end point
- I waited for two hours. — duration
- She left two hours ago. — counting back from now
- She had left two hours before. — counting back from a past point
Tip: from … to 和 since 这一对值得仔细分开:from … to 把这段时间封上,since 让它继续敞着。
9How long have you… 与 how long did you…
疑问句是这一切显形的地方,也是选错就等于换了个问题的地方。
"How long have you lived here?" 问的是一段仍在继续的时间——你现在住在这儿。"How long did you live here?" 问的是一段已经结束的时间——你已经搬走了。问错不是语法错误,是问了另一个问题,而你得到的答案会把你绕晕。
- How long have you been learning English? — you still are
- How long did you learn English? — you stopped
- How long have you known her? — you still know her
- How long ago did you meet her? — a single past moment
- When did you arrive? — never "when have you arrived"
when 不能配现在完成时。"When have you arrived?" 是错的,因为 when 要的是过去的一个具体时点,而现在完成时拒绝具体的过去时点。要说 "When did you arrive?"
回答也照同样的界线分。"I've lived here for six years" 或 "since 2019" 回答完成时的问题;"I lived here for six years" 回答过去时的问题。让答句的时态对上问句,是件小事,却明显让对话更顺。
Tip: How long ago…? 永远用一般过去时,因为它里面有 ago。别处拿不准时,这一条可靠到足以当锚。
10为什么母语会把你推向错误
你会不会犯这些错、会犯哪些,基本可以从你已经会说的语言推出来。
这些语言用现在时描述持续中的状况:波斯语 «من پنج سال است اینجا زندگی میکنم»,德语 "Ich wohne seit fünf Jahren hier"。两句直译过来都是 "I live here since five years"——错了两处:时态错,since 与 for 也选错了。德语母语者尤其容易被 seit 带偏,因为 seit 同时覆盖 since 和 for。
法语的 depuis 和西班牙语的 desde 既译作 since 也译作 for,所以没有任何信号告诉你该选哪个英语词。"J'habite ici depuis six ans" 就变成了 "I live here since six years"。解决办法是先判断后面跟的是一个点还是一段长度,再挑英语词。
斯拉夫语言把"完成"体现在动词体上,而不是一个单独的完成时,所以没有结构可以迁移。这些母语者往往到处都用一般过去时,于是出现 "I live here five years" 或 "I lived here since 2019"。
如果你的母语用同一个词表示 since 和 for,那就默认你正在犯这个错,直到你专门练过为止。它从不妨碍别人听懂,所以从不会被纠正,所以它能跟你好多年。
Tip: 先在上面找到你那一行,然后把第十一节的练习做两遍。知道自己往哪个方向偏,比知道规则更值钱。
11三十个句子,逐句改正
把右半边遮住,先自己改再看答案。这些都取自真实学习者英语中最常出现的错误。
- I live here since 2019 → I have lived here since 2019
- I have lived here since six years → I have lived here for six years
- I have finished it two hours ago → I finished it two hours ago
- I am here since two hours → I have been here for two hours
- I know her since we were children → I have known her since we were children
- How long do you work here? → How long have you worked here?
- When have you arrived? → When did you arrive?
- I ago two days saw him → I saw him two days ago
- She is ill since Tuesday → She has been ill since Tuesday
- I waited until two hours → I waited for two hours
- We are married for twenty years → We have been married for twenty years
- I didn't see her since the wedding → I haven't seen her since the wedding
- It's raining since this morning → It has been raining since this morning
- I have worked there for five years, but I left in 2020 → I worked there for five years
- How long ago have you moved here? → How long ago did you move here?
- I study English since three years → I have been studying English for three years
- He has left the office ten minutes ago → He left the office ten minutes ago
- I am waiting for you since one hour → I have been waiting for you for an hour
- She works here from 2018 → She has worked here since 2018
- I worked there from 2015 to 2019 → correct as written
- We haven't spoken for ages → correct as written
- I will finish it ago two hours → I will finish it in two hours
- Since you are here, can you help? → correct as written
- He had left two hours ago (in a past narrative) → He had left two hours before
- I have been here for two hours → correct as written
- This is the first time I am here since 2019 → This is the first time I've been here since 2019
- I haven't eaten since yesterday → correct as written
- How long are you in Canada? (meaning so far) → How long have you been in Canada?
- I lived in Berlin since six years → I lived in Berlin for six years
- It has been a long time since we met → correct as written
Tip: 其中有六句本来就是对的。如果你把它们也改了,说明你规则用得过猛——这和不懂规则是两个不同的问题。
12从真实口语中收集它们
只要有人聊自己的生活,这三个词几乎必然出现,所以收集起来出奇地容易。
任何一场问到 "how long have you been doing this?" 的访谈,几秒钟内就会连着给你 since、for 和现在完成时。和一个搬过国家的人聊天也一样。这类素材不用去找,你要做的是它出现时能察觉到。
听还能修好规则够不着的一件事:这些词在口语里几乎总是不重读且被压缩的。for 缩成类似 "fuh" 的一声,I've、we've、he's 则化进后面的词里。如果你只在纸面上见过它们,你根本听不到那个完成时——你听到的是一般过去时,然后错误地断定母语者不守规则。
- 找一段有人讲述自己工作或生活的访谈
- 每次听到 since,记下后面跟的是一个时间点还是一整个从句
- 每次听到 for,从时态判断这段时间是否还在继续
- 把整句话存下来,因为时间词和时态是一个整体
- 用 since、for、ago 各一次,出声回答三个关于你自己的问题
Tip: FlexiLingo 给 YouTube 和播客加上互动字幕,你可以点任意单词查看释义和 CEFR 等级,并连整句一起保存——这一点在这里尤其重要,因为光看时间词,你学不到它所要求的那个动词形式。
常见问题
since 标记起点——since 2019、since Monday、since I moved here。for 标记时长——for six years、for two hours。所以 "since six years" 永远是错的,因为六年是一段长度而不是一个点。since 几乎总是要求完成时;for 配任何时态都行,而正是那个时态告诉听者这段时间结束了没有。
since 这个词没选错——2019 确实是起点,错的是动词。since 要求完成时,所以必须写成 "I have lived here since 2019"。这是这三个词里最常见的错误,通常来自一门用现在时描述持续状况的母语。
不能,绝对不行。ago 指向过去一个已经关闭的时刻,而现在完成时要求一个敞开的时段,两者互相矛盾。"I have finished it two hours ago" 在哪儿都是错的;要说 "I finished it two hours ago"。如果你要从过去某个点而不是从现在往回数,用 before:"He had left two hours before."
不是,而且这么以为会造成真正的误会。for 配任何时态都行,意思由时态承担:"I worked there for five years" 表示你已经离开了,而 "I have worked there for five years" 表示你还在那儿。两句都是正确的英语,但只有一句是关于你的事实。
前一句预设你还住在这儿,后一句预设你已经搬走了。它们是两个不同的问题,不是两种礼貌程度。问错了,你得到的答案就对不上你想知道的事。
不一定——它还表示"因为":"Since you're here, could you help?" 这个意思对时态毫无要求。区分很简单:能把 since 换成 because,就是原因义;能换成 from,就是时间义。