3 Answers
3

It's true that "it would be / would have been our 7th anniversary tomorrow" is about the future, and many speakers, particularly strict teachers and non-native speakers, would think that "If I hadn't left her, it would have been our 7th anniversary tomorrow." sounds wrong or even ungrammatical because it's "tomorrow" and tomorrow hasn't come yet.

However, this appears to be acceptable and I think it happens often enough that we shouldn't consider it ungrammatical. Practical English Usage by Michael Swan addresses this in 259.3:

We sometimes use structures with would have ... to talk about present and future situations which are no longer possible because of the way things have turned out.It would have been nice to go to Australia this winter, but there's no way we can do it. (OR It would be nice ...)If my mother hadn't knocked my father off his bicycle thirty years ago, I wouldn't have been here now. (OR ... I wouldn't be here now.)

To put it simply, both of your alternatives should be equally acceptable. Just keep in mind that on exams (or in exams, if you prefer in to on), it's probably safer to use it would be our 7th anniversary tomorrow.

A crystal clear explanation. One more gap in grammar has been filled.
– Victor B.Jun 1 '16 at 12:20

Consider ordinary English sentences: I was going to have lunch with him tomorrow, but I got sick.She was to become famous the next year.Marty said that he wanted to become president. A good teacher or text should make it clear that a past tense form does not always mean we are talking about the past. I wouldn't proscribe this usage on a formal test, it is formal English.
– Alan CarmackJun 1 '16 at 12:40

-1 The sentence you are talking about is the model way to construct the so-called third conditional. This answer explains the use of tomorrow, but the OP is not asking about the use of tomorrow, but about the difference between a mixed conditional and the third conditional. The use of tomorrow in the third conditional poses no problem to native speakers, as past tense forms are often used to refer to future time. This is how English works.
– Alan CarmackJun 2 '16 at 17:58

1

@AlanCarmack It turns out, the book is not that different from other books. On page 256 (I missed this the first time because your link doesn't jump right to that page), it states: "In this type [counterfactual conditional, aka the 3rd conditional] the even or state is presented as counter to the reality: it didn't happen." Note the word "didn't". (It's not "doesn't", or "won't".) This is a typical explanation of the 3rd conditional in grammar books for learners.
– Damkerng T.Jun 2 '16 at 19:15

1

@AlanCarmack BTW, I don't use these 0, 1, 2, 3, or mixed conditionals myself, but thanks anyway. Personally, these conditionals are the first thing I'd advise a learner to abandon as soon as possible if they asked for my advice. :-)
– Damkerng T.Jun 2 '16 at 19:17

Both the hypothetical, counterfactual sentences are correct grammatically, with a little difference in meaning.

The first tense is a mixture of conditional type II and conditional type III. The if-clause refers to the condition in the past, whereas the
main clause refers to the result in the future. In simple words, as said by Khan, it implies that I really left her. So it won't be our 7th anniversary tomorrow.

On the other hand, the second sentence is conditional type III, in which we talk about the situation both in the if-clause and the main clause in the past. Because of the use of 'tomorrow' in the main clause, 'would have' refers to the future from the point of view of the past. This sentence in actuality means that I left her. So we didn't have our 7th anniversary the next day.

The use of these sentences depends on the time frame you have in your mind in regard to the anniversay. If you want to refer to the happening of the anniversary in the future, you should use would be. On the other hand, if you want to refer to the happening of the event in the future from the point of view of the past, you should use would have been.

They both mean that the speaker really did leave "her" in the past, but if the contrary were true, the speaker and "her" (ie she) would be celebrating their 7th anniversary on the day after the speaker utters this sentence (which day is tomorrow).

Notice, first, that this is a past unreal condition. Different folks call it different things; you call it a third conditional; the textbook English Grammar: A University Course (3rd edition) calls it a "counterfactual conditional clause"). Click on Page 265 of that link.

As for which version (would be or would have been) should be the better option to go with, it really depends on what you want to say. Note that page 266 of the same textbook says

The counterfactual construction [would/should/could + have + past participle of full verb]...can occur in other discourse contexts such as expressing regret or reproof at something that didn't take place.

and gives the example

It would have been a pleasure to meet your son. (but we didn't meet him)

This same sense of expressing regret or lament over something that didn't take place is one reason you might choose would have been in your sentence. If you did not want to express this, you should choose would be.

As for the word tomorrow in the main clause of a past unreal conditional, it's working the same way as in

If we had had the opportunity, it would have been a pleasure to meet your son tomorrow when we were all in Phoenix tomorrow, but I doubt I'll be over the plague by tomorrow and will need to stay in my room tomorrow. Thus my being sick prevents such a meeting tomorrow.

The whole (conditional) sentence is written about the future–from the point of the past. We often do this in English, as in

You need to point out that hadn't've is a recent innovation (a new "subjunctive" suffix, -da, negative -dna) which has become common in colloquial English but is still entirely unacceptable in formal English.
– StoneyB on hiatusJun 1 '16 at 11:00

You may ignore the bit about a 'new subjunctive suffix', but the fact stands that If I had not have left is not Standard English.
– StoneyB on hiatusJun 1 '16 at 11:08

1

Quite so; indeed, I myself use this very often in speech. But it will be rejected in most academic contexts; and I think we owe it to our learners (many of whom are pursuing or hope to pursue advanced degrees in Anglophone universities) to make them aware of these differences in register.
– StoneyB on hiatusJun 1 '16 at 11:52