Fortran, Algol, Cobol, PL/I, Pascal, Ada, Lua, Haskell, etc. are right and C and Dijkstra are wrong.
Dijkstra titled his essay wrong. He never explains why numbering should start with 0. He said that if numbering starts with 0, the upper bound should be excluded. Then he says that if you exclude the upper bound, numbering should start with 0. That's circular reasoning. If you include the upper bound, which is the most natural, numbering should start with 1.
fortran90.org/src/faq.html#what-is-the-most-natural-way-to-handle-initial-and-final-points-of-intervals
If you mean the numbers 2, 3, ..., 12, you say numbers from 2 to 12. You don't say 2 to 13, 1 to 12, or 1 to 13. Those are all nonsense. If a place is open on Monday, Tuesday, Wednesday, Thursday, and Friday, you say it's open Monday to Friday, not Monday to Saturday. When you count from 1 to 10, you start with 1 and end with 10, not start with 1 and end with 9.
In Haskell when you write [2..12] (meaning enumFromTo 2 12), you get the sequence 2 to 12. When you can use enums, not just numbers, this is the only way that makes sense. [Monday..Friday] has one common meaning.
For an empty sequence, you write 1..0. It can also be any number less than the lower bound, like 1..-10, 2..1, 100..0. These are all empty sequences. Just like when you write a loop for i = 1 to 0 or for i = 60 to -10, which execute 0 times. For an array with N elements, the bounds are 1..N. For a loop that repeats N times, the bounds are 1..N.