# GEDCOM date‑constraint semantics should not be propagated into Gramps

**URL:** <https://gramps.discourse.group/t/gedcom-date-constraint-semantics-should-not-be-propagated-into-gramps/9282>\
**Category:** Development\
**Tags:** gedcom\
**Created:** [March 29, 2026, 2:21am UTC](https://gramps.discourse.group/t/gedcom-date-constraint-semantics-should-not-be-propagated-into-gramps/9282 "2026-03-29T02:21:13Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![StoltHD](https://avatars.discourse-cdn.com/v4/letter/s/db5fbb/32.png) [@StoltHD](https://gramps.discourse.group/u/StoltHD)\
**Post date:** [March 29, 2026, 2:21am UTC](https://gramps.discourse.group/t/gedcom-date-constraint-semantics-should-not-be-propagated-into-gramps/9282/1 "2026-03-29T02:21:13Z")

</div>

**Subject: GEDCOM date‑constraint semantics should not be propagated into Gramps**

First of all, apologies for raising this here, but I’ve recently become aware of a fairly serious issue in how dates are handled — both in GEDCOM and, as far as I can tell, also in Gramps. Because this PR touches the same area, I feel it’s important to surface it now before the problem becomes further embedded.

This concerns how GEDCOM represents date ranges, and how those semantics differ from historical chronology.

GEDCOM uses expressions like **“Not Earlier Than”** and **“Not Later Than”** , which are not historical concepts. They originate from constraint logic used in workflow/task‑management systems. In GEDCOM, these constraints are treated as boundaries starting at the **beginning** of a year or period.

This creates a fundamental mismatch:

- A historical **After 1850** means “sometime after the end of 1850”.
- GEDCOM’s **Not Earlier Than 1850** means “starting at the beginning of 1850”.

These are not equivalent, and they produce contradictory results when interpreted as if they were historical date ranges.

If Gramps (or this FamilySearch integration) maps GEDCOM’s constraint‑style dates directly into Gramps’ historical date model, the result is a silent distortion of chronology. It effectively rewrites historical periods to fit a scheduling logic that was never intended for historical data.

**My request:** Before merging this PR, and ideally in Gramps itself, we should ensure that:

- GEDCOM’s constraint‑based date semantics are **not** treated as historical ranges
- Gramps does **not** reinterpret constraint dates as if they were evidence‑based historical intervals
- The distinction between _historical uncertainty_ and _constraint logic_ is preserved in the data model and in the sync layer

If this is not addressed, Gramps will continue to inherit a known flaw in GEDCOM’s date semantics, and FamilySearch sync will amplify it by flattening historical periods into constraint boundaries.

This is not a minor formatting issue — it affects historical accuracy and chronological integrity. I would strongly recommend that Gramps introduce a clear separation between:

- **historical date ranges** (evidence‑based uncertainty)
- **constraint‑style dates** (GEDCOM/FamilySearch operational boundaries)

so that the meaning of the original data is preserved.

–  
_ **Note:** This text is AI‑assisted and based on earlier posts I have written, including material originally written in both Norwegian and English and later translated or refined by a language model. The arguments and concerns are mine; the phrasing has simply been clarified._

---

<div class="post-metadata">

**Author:** ![hartenthaler](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/hartenthaler/32/3404_2.png) [@hartenthaler](https://gramps.discourse.group/u/hartenthaler)\
**Post date:** [March 29, 2026, 2:23pm UTC](https://gramps.discourse.group/t/gedcom-date-constraint-semantics-should-not-be-propagated-into-gramps/9282/2 "2026-03-29T14:23:48Z")

</div>

> [@StoltHD](#):
>
> - A historical **After 1850** means “sometime after the end of 1850”.
> - GEDCOM’s **Not Earlier Than 1850** means “starting at the beginning of 1850”.

“AFT 1850” is “AFT (BET 1 JAN 1850 AND 31 DEC 1850)”. And that is for me logically “AFT 1 JAN 1850”. Your historical definition is for me illogical. Maybe the combination of unprecise dates and before/after is not intuitiv for everyone.

What is your proposal?

---

<div class="post-metadata">

**Author:** ![comeng](https://avatars.discourse-cdn.com/v4/letter/c/2acd7d/32.png) [@comeng](https://gramps.discourse.group/u/comeng)\
**Post date:** [March 29, 2026, 2:54pm UTC](https://gramps.discourse.group/t/gedcom-date-constraint-semantics-should-not-be-propagated-into-gramps/9282/3 "2026-03-29T14:54:07Z")

</div>

The semantics of this get complex

AFT 1850 is any date greater than the 23:59:59 on the 31st Dec 1850  
BEF 1850 is any date less than 00:00:00 on the 1st Jan 1850

That is why I would prefer to use the mathematical symbols

> is AFT as above  
> = is AFT 00:00:00 on the 1st Jan 1850  
> \< is BEF as above  
> \<= is BEF 23:59:59 on the 31st Dec 1850

BEF & AFT mean different things to different people

Just as long as everyone is singing from the same hymn sheet,  
phil

---

<div class="post-metadata">

**Author:** ![StoltHD](https://avatars.discourse-cdn.com/v4/letter/s/db5fbb/32.png) [@StoltHD](https://gramps.discourse.group/u/StoltHD)\
**Post date:** [March 29, 2026, 2:58pm UTC](https://gramps.discourse.group/t/gedcom-date-constraint-semantics-should-not-be-propagated-into-gramps/9282/4 "2026-03-29T14:58:17Z")

</div>

**AFT (After) 1850 does not mean “after 1 January 1850”.**  **It means “after the year 1850 has ended”.**

In historical, chronological, and mathematical logic:

- The year **1850** represents the interval **[1850‑01‑01, 1850‑12‑31]**

Therefore:

- **AFT (After) 1850** means a date **\> 1850‑12‑31**
- The first valid date is **1851‑01‑01**

So:

- “After 1850” does **not** include any part of 1850
- It begins **after** the period 1850, not at its start

This follows standard mathematical logic:

- **AFT 1850 → date \> 1850‑12‑31**

@comeng

### **Regarding the idea that “AFT means different things to different people”:**

“After” cannot have multiple subjective meanings in chronology. It has one precise interpretation:

**After X = strictly later than the end of X.**

This applies whether X is a day, a month, a year, or any defined period. Interpreting “after 1850” as “after 1 January 1850” would invert the meaning of the period, treating the _start_ of 1850 as if it were its _end_, which contradicts historical usage, mathematical ordering, and common language.

### **About the LDS/GEDCOM terminology**

The fact that LDS/GEDCOM introduced terms like **“Not Earlier Than”** , **“Not Later Than”** , and other project‑management‑style constraints into what are otherwise clear historical concepts does **not** make those interpretations correct.

These terms come from **task‑management logic** , not from historical chronology. They are used to determine whether _future tasks_ may start earlier or later depending on dependencies and resource availability — **not** to define historical dates.

Using such constraint‑based terminology as if it were equivalent to historical expressions like _before_, _after_, or _between_ can easily lead to incorrect conclusions and faulty calculations in historical data.

For example:

If we say a person was born “after 1850”, this does **not** mean “sometime in 1850 or later”.

It means:

**The person was born after the period 1850, i.e., no earlier than 1 January 1851.**

Confusing project‑management constraints with historical chronology produces wrong results.

---

<div class="post-metadata">

**Author:** ![StoltHD](https://avatars.discourse-cdn.com/v4/letter/s/db5fbb/32.png) [@StoltHD](https://gramps.discourse.group/u/StoltHD)\
**Post date:** [March 29, 2026, 3:28pm UTC](https://gramps.discourse.group/t/gedcom-date-constraint-semantics-should-not-be-propagated-into-gramps/9282/5 "2026-03-29T15:28:27Z")

</div>

> [@comeng](#):
>
> The semantics of this get complex
> 
> AFT 1850 is any date greater than the 23:59:59 on the 31st Dec 1850  
> BEF 1850 is any date less than 00:00:00 on the 1st Jan 1850
> 
> That is why I would prefer to use the mathematical symbols
> 
> > is AFT as above  
> > = is AFT 00:00:00 on the 1st Jan 1850  
> > \< is BEF as above  
> > \<= is BEF 23:59:59 on the 31st Dec 1850
> 
> BEF & AFT mean different things to different people
> 
> Just as long as everyone is singing from the same hymn sheet,  
> phil

You define:

- AFT 1850 as any date \> 23:59:59 on 31 Dec 1850

But then you say:

- “= is AFT 00:00:00 on 1 Jan 1850”

Those two statements cannot both be true. If AFT 1850 means _after the end of 1850_, it cannot at the same time be equal to the very start of 1850.

The same goes for your: `<= is BEF 23:59:59 on the 31st Dec 1850`.  
This is the mathematics for “less than or equal”, i.e. including the whole day of 31 Dec 1850.

* * *

**With the mathematical logic you are using, the expression “= is AFT 00:00:00 on 1 Jan 1850” would actually imply ≥ 1 Jan 1850 — which contradicts your own definition two lines above that AFT 1850 means any date \> 23:59:59 on 31 Dec 1850.**

This is the mathematics:

- After 1850 equals `> 1850-12-31`
- From 1850 equals `≥ 1850-01-01`
- Before 1850 equals `< 1850-01-01`
- Between 1850 and 1860 equals `1850-12-31 < date < 1860-01-01`

* * *

_Note: some small edits after first save_

---

<div class="post-metadata">

**Author:** ![hartenthaler](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/hartenthaler/32/3404_2.png) [@hartenthaler](https://gramps.discourse.group/u/hartenthaler)\
**Post date:** [March 29, 2026, 3:47pm UTC](https://gramps.discourse.group/t/gedcom-date-constraint-semantics-should-not-be-propagated-into-gramps/9282/6 "2026-03-29T15:47:40Z")

</div>

> [@StoltHD](#):
>
> The year **1850** represents the interval **[1850‑01‑01, 1850‑12‑31]**

Are you sure? If Fred is born in 1850, he is not born in an intervall. He is born at a spefic point in time, but the exact day and month are unknown. It is a

- point - not a period, not a range
- Temporal precision is limited to the year level

---

<div class="post-metadata">

**Author:** ![comeng](https://avatars.discourse-cdn.com/v4/letter/c/2acd7d/32.png) [@comeng](https://gramps.discourse.group/u/comeng)\
**Post date:** [March 29, 2026, 3:49pm UTC](https://gramps.discourse.group/t/gedcom-date-constraint-semantics-should-not-be-propagated-into-gramps/9282/7 "2026-03-29T15:49:06Z")

</div>

I actually wrote

```
> is AFT as above
>= is AFT 00:00:00 on the 1st Jan 1850
< is BEF as above
<= is BEF 23:59:59 on the 31st Dec 1850

```

but it seems to have got truncated  
phil

---

<div class="post-metadata">

**Author:** ![StoltHD](https://avatars.discourse-cdn.com/v4/letter/s/db5fbb/32.png) [@StoltHD](https://gramps.discourse.group/u/StoltHD)\
**Post date:** [March 29, 2026, 4:03pm UTC](https://gramps.discourse.group/t/gedcom-date-constraint-semantics-should-not-be-propagated-into-gramps/9282/8 "2026-03-29T16:03:44Z")

</div>

Yes I am sure…

**a birth is a point in time, but when only the year is known, that point must lie somewhere within the interval [1850‑01‑01, 1850‑12‑31].**  **The year is the interval, the birth is the point inside the interval.**

And following the same logic:

**If Fred is born “in 1850”, then he must have been born** _ **at some unknown point within that interval** _ \*\*.  
\*\* **If you instead say he is born** _ **AFT 1850** _ **, then he is born** _ **after** _ **that interval — not inside it.**

---

<div class="post-metadata">

**Author:** ![StoltHD](https://avatars.discourse-cdn.com/v4/letter/s/db5fbb/32.png) [@StoltHD](https://gramps.discourse.group/u/StoltHD)\
**Post date:** [March 29, 2026, 4:07pm UTC](https://gramps.discourse.group/t/gedcom-date-constraint-semantics-should-not-be-propagated-into-gramps/9282/9 "2026-03-29T16:07:28Z")

</div>

**Thanks Phil — and yes, with your updated symbols we are actually saying the same thing.**  **If AFT 1850 is meant to be “after the end of 1850”, then the earliest possible point is \> 1850‑12‑31.**  **If you write “\>= 1 Jan 1850”, that instead includes the entire year 1850, which contradicts the definition above.**

**So we agree:**

- _In 1850_ → the point lies somewhere inside the interval **[1850‑01‑01, 1850‑12‑31]**
- _AFT 1850_ → the point lies **after** that interval
- _BEF 1850_ → the point lies **before** that interval

---

<div class="post-metadata">

**Author:** ![ztlxltl](https://avatars.discourse-cdn.com/v4/letter/z/96bed5/32.png) [@ztlxltl](https://gramps.discourse.group/u/ztlxltl)\
**Post date:** [March 29, 2026, 4:27pm UTC](https://gramps.discourse.group/t/gedcom-date-constraint-semantics-should-not-be-propagated-into-gramps/9282/10 "2026-03-29T16:27:22Z")

</div>

I just want to make sure that everyone in this discussion is aware that the definitions of GEDCOM’s AFT and BEF changed with GEDCOM 7.0. In last August, I wrote the following summary. Please refer to the links for further background info.

> [@Misleading date range labels? (Before, After, Between)](https://gramps.discourse.group/t/misleading-date-range-labels-before-after-between/7250/13):
>
> Modified summary taken from [here](https://github.com/FamilySearch/GEDCOM/discussions/287#discussion-4894586):
> 
> - GEDCOM 5.5.1 ([PDF](https://gedcom.io/specifications/ged551.pdf#page=47)) defined:  
> AFT = Event happened after the given date.  
> BEF = Event happened before the given date.  
> This is **exclusive** and uses the meaning of the words “after” and “before” so the UI matches the standard.
> - GEDCOM 7.0 ([PDF](https://gedcom.io/specifications/FamilySearchGEDCOMv7.pdf#page=26), [HTML](https://gedcom.io/specifications/FamilySearchGEDCOMv7.html#date)) has modified the definition to:  
> AFT x = Exact date unknown, but no earlier than x.  
> BEF x = Exact date unknown, but no later than x.  
> This is **inclusive**.
> - FROM and TO are inclusive in both versions and match the meaning of the words and therfore the UI.

This discussion seems to be based on the phrases “no earlier than” and “no later than” which are used in the GEDCOM 7.0 standard, not in the 5.5.1 standard. Gramps currently doesn’t support GEDCOM 7.0 (please correct me if my state of knowledge is outdated) and was built around the definitions in GEDCOM versions before the change of the meaning of AFT and BEF.

I likely don’t have the time to participate in this discussion in-depth. In my opinion, the logical meaning (in Gramps’ documentation/data field definition, code e.g. for comparison/filters, etc.) should be the same as the meaning of the words in the UI (this is important when translating). GEDCOM exporters and importers should deal with the correct processing according to the GEDCOM version used.

---

<div class="post-metadata">

**Author:** ![StoltHD](https://avatars.discourse-cdn.com/v4/letter/s/db5fbb/32.png) [@StoltHD](https://gramps.discourse.group/u/StoltHD)\
**Post date:** [March 29, 2026, 3:59pm UTC](https://gramps.discourse.group/t/gedcom-date-constraint-semantics-should-not-be-propagated-into-gramps/9282/11 "2026-03-29T15:59:15Z")

</div>

> [@FamilySearch Integration PR](https://gramps.discourse.group/t/familysearch-integration-pr/9272/11):
>
> The year **1850** represents the interval **[1850‑01‑01, 1850‑12‑31]**

Yes I am sure…

**a birth is a point in time, but when only the year is known, that point must lie somewhere within the interval [1850‑01‑01, 1850‑12‑31].**  **The year is the interval, the birth is the point inside the interval.**

And following the same logic:

**If Fred is born “in 1850”, then he must have been born** _ **at some unknown point within that interval** _ \*\*.  
\*\* **If you instead say he is born** _ **AFT 1850** _ **, then he is born** _ **after** _ **that interval — not inside it.**

---

<div class="post-metadata">

**Author:** ![emyoulation](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/emyoulation/32/67_2.png) [@emyoulation](https://gramps.discourse.group/u/emyoulation)\
**Post date:** [March 29, 2026, 4:48pm UTC](https://gramps.discourse.group/t/gedcom-date-constraint-semantics-should-not-be-propagated-into-gramps/9282/12 "2026-03-29T16:48:42Z")

</div>

> [@hartenthaler](#):
>
> Are you sure? If Fred is born in 1850, he is not born in an interval

If the Day or the Day and Month are left out of a date, then Gramps interprets this as an interval/span/range, not a point.

If you want specificity, then you have to enter a fully qualified date with day, month _ **and** _ year.

_(This is one of the oddities that a genealogist should explore in other software too. Some software will export a date of “1850” as “1 Jan 1850” … or “Mar 1861” as “1 Mar 1861”. That is because they do not truly support incomplete dates as approximations and consider the missing part as “the first of…”. This means that you should be suspicious of any date falling on the 1st of any month. And even more suspicious of dates falling on January 1st.)_

One of the things that Gramps does not record well are anniversary dates where the day and month are known but the year is unknown.

---

<div class="post-metadata">

**Author:** ![Nick-Hall](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/nick-hall/32/95_2.png) [@Nick-Hall](https://gramps.discourse.group/u/Nick-Hall)\
**Post date:** [March 29, 2026, 6:00pm UTC](https://gramps.discourse.group/t/gedcom-date-constraint-semantics-should-not-be-propagated-into-gramps/9282/13 "2026-03-29T18:00:59Z")

</div>

> [@ztlxltl](#):
>
> This discussion seems to be based on the phrases “no earlier than” and “no later than” which are used in the GEDCOM 7.0 standard, not in the 5.5.1 standard.

They are also not used in the GedcomX standard which we use in the FamilySearch integration.

Gramps, Gedcom 5.5.1 and GedcomX appear to be consistent:

| Gramps | Gedcom 5.5.1 | GedcomX |
| --- | --- | --- |
| Before 1850 | BEF 1850 | /+1850 |
| 1850 | 1850 | +1850 |
| After 1850 | AFT 1850 | +1850/ |

We will just have to be careful when implementing Gedcom 7.0 import/export.

---

<div class="post-metadata">

**Author:** ![hartenthaler](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/hartenthaler/32/3404_2.png) [@hartenthaler](https://gramps.discourse.group/u/hartenthaler)\
**Post date:** [March 29, 2026, 6:15pm UTC](https://gramps.discourse.group/t/gedcom-date-constraint-semantics-should-not-be-propagated-into-gramps/9282/14 "2026-03-29T18:15:01Z")

</div>

> [@emyoulation](#):
>
> If the Day or the Day and Month are left out of a date, then Gramps interprets this as an interval/span/range, not a point.
> 
> If you want specificity, then you have to enter a fully qualified date with day, month _ **and** _ year.

That is definitely not correct. If the source says “birth 1850” it is not possible to enter a fully qualified date.

> [@emyoulation](#):
>
> One of the things that Gramps does not record well are anniversary dates where the day and month are known but the year is unknown.

This is the same in many genealogical applications. In GEDCOM you have to use a phrase. How is such a anniversary date imported and exported from/to GEDCOM?

---

<div class="post-metadata">

**Author:** ![emyoulation](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/emyoulation/32/67_2.png) [@emyoulation](https://gramps.discourse.group/u/emyoulation)\
**Post date:** [March 29, 2026, 6:27pm UTC](https://gramps.discourse.group/t/gedcom-date-constraint-semantics-should-not-be-propagated-into-gramps/9282/15 "2026-03-29T18:27:38Z")

</div>

> [@hartenthaler](#):
>
> That is definitely not correct. If the source says “birth 1850” it is not possible to enter a fully qualified date.

That’s _exactly_ the pertinent issue. Gramps let’s you record a Birth event with a date of `1850` when you do not KNOW the fully qualified date and cannot be specific. And so Gramps treats it as an interval/span/range, not a point.

> [@hartenthaler](#):
>
> This is the same in many genealogical applications. In GEDCOM you have to use a phrase. How is such a anniversary date imported and exported from/to GEDCOM?

dates without a year _ **do** _ come in and save as `text string`. However, that is not the part that I saying that Gramps does not support well.

Gramps has anniversary and birthday reminder calendars. I would like the calendar to support showing that “Tom and Mary Smith have an upcoming anniversary on June 8th” … even where we don’t know what year to record when they were married.

---

<div class="post-metadata">

**Author:** ![GeorgeWilmes](https://avatars.discourse-cdn.com/v4/letter/g/c57346/32.png) [@GeorgeWilmes](https://gramps.discourse.group/u/GeorgeWilmes)\
**Post date:** [March 29, 2026, 8:16pm UTC](https://gramps.discourse.group/t/gedcom-date-constraint-semantics-should-not-be-propagated-into-gramps/9282/16 "2026-03-29T20:16:21Z")

</div>

> [@hartenthaler](#):
>
> If the source says “birth 1850” it is not possible to enter a fully qualified date.

In that case, would it make a beneficial difference to enter the date more explicitly as “between 1850-01-01 and 1850-12-31”? I think that would still mean a single (unknown) date, as opposed to a range (“from … to …”)?

---

<div class="post-metadata">

**Author:** ![hartenthaler](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/hartenthaler/32/3404_2.png) [@hartenthaler](https://gramps.discourse.group/u/hartenthaler)\
**Post date:** [March 29, 2026, 8:54pm UTC](https://gramps.discourse.group/t/gedcom-date-constraint-semantics-should-not-be-propagated-into-gramps/9282/17 "2026-03-29T20:54:01Z")

</div>

Yes, there is a small but important semantic difference between

- date known with precision of year
- date in interval with exactly known interval borders

---

<div class="post-metadata">

**Author:** ![StoltHD](https://avatars.discourse-cdn.com/v4/letter/s/db5fbb/32.png) [@StoltHD](https://gramps.discourse.group/u/StoltHD)\
**Post date:** [March 31, 2026, 4:32pm UTC](https://gramps.discourse.group/t/gedcom-date-constraint-semantics-should-not-be-propagated-into-gramps/9282/18 "2026-03-31T16:32:06Z")

</div>

Since the discussion has brought up both **“date known with precision of year”** and **“date in interval with exactly known interval borders”** , I want to clarify what the expression _“born in 1850”_ actually represents.

It does **not** refer to a fixed point somewhere inside the year. It means that the birth could have occurred **at any possible date within the interval that defines the year 1850**.

### 1) When treating “1850” as a full interval, e.g.

1850,1850

— which, by any known logic, is the only meaningful way to treat a year

The year has well‑defined boundaries:

- **intervalmin = 1850‑01‑01**
- **intervalmax = 1850‑12‑31**

A date that is _somewhere inside_ that interval can therefore be expressed as:

**intervalmin ≤ date ≤ intervalmax**

or, if expressed as an open interval:

**1849‑12‑31 \< date \< 1851‑01‑01**

Both notations describe the same idea: **“1850” is not a point — it is a set of possible points.**

### 2) For the case “date in interval with exactly known interval borders”

This can be expressed simply as:

**intervalmin \< date \< intervalmax**

which again reflects that the date is _inside_ the interval, not a fixed point.

---

<div class="post-metadata">

**Author:** ![hartenthaler](https://yyz2.discourse-cdn.com/free1/user_avatar/gramps.discourse.group/hartenthaler/32/3404_2.png) [@hartenthaler](https://gramps.discourse.group/u/hartenthaler)\
**Post date:** [March 31, 2026, 6:57pm UTC](https://gramps.discourse.group/t/gedcom-date-constraint-semantics-should-not-be-propagated-into-gramps/9282/19 "2026-03-31T18:57:56Z")

</div>

In 1): 1449 should be 1849

In2): the borders of the interval are included, so it should be \<= instead of \<

Semantic of 1) is not equal to 2) because of “uncertain in a year” is a bit different to “inside interval with exactly known borders“.

---

<div class="post-metadata">

**Author:** ![StoltHD](https://avatars.discourse-cdn.com/v4/letter/s/db5fbb/32.png) [@StoltHD](https://gramps.discourse.group/u/StoltHD)\
**Post date:** [March 31, 2026, 8:33pm UTC](https://gramps.discourse.group/t/gedcom-date-constraint-semantics-should-not-be-propagated-into-gramps/9282/20 "2026-03-31T20:33:53Z")

</div>

### **1) Yes, “1449” was a typo — it should of course be 1849.**

That part is corrected.

### **2) About the interval borders (“\<” vs “≤”)**

As I described earlier, the choice between using `<` or `≤` is not a matter of correctness, but of _which semantics we are expressing_.

In case (1), the year interval can be written either as a closed interval or as the equivalent open interval shifted by one day on each side — both represent the same set of possible dates.

In case (2), the semantics are explicitly _inside_ a known interval, inside and in when you have two borders is the same, you wrote: _" date **in** interval with exactly known interval borders"_ which is why the natural mathematical form is:

**intervalmin \< date \< intervalmax**

This reflects the intended meaning of that category: the date lies _somewhere within_ the interval, not on its borders.

_And just to clarify: if the borders were meant to be included, the wording would simply have been “in a known interval” or explicitly “including the borders”. The phrase you used — “date in interval with exactly known interval borders” — naturally describes a point **somewhere within** the interval, not on the borders._

[Next page](https://gramps.discourse.group/t/gedcom-date-constraint-semantics-should-not-be-propagated-into-gramps/9282.md?page=2)
