Next.js in Adelaide
Next.js development for Adelaide businesses on a half-hour offset
A Next.js development company working with Adelaide businesses. A time zone thirty minutes off the hour, which breaks the arithmetic in a surprising amount of software.
- Working day overlap
- About an hour and a half. Adelaide is six and a half hours ahead of Ankara, and the half hour is not a rounding error
- Who buys here
- Defence and space businesses, wine and agribusiness exporters, health and medical research, and manufacturing
- What that changes
- A half-hour offset breaks code that assumes whole-hour time zones, which is a surprising amount of otherwise careful software
- Local specifics
- South Australia observes daylight saving while Queensland and Western Australia do not, so a national application faces three different behaviours
Adelaide is half an hour off the hour, and that is not a trivia question - it is the reason Adelaide finds time zone bugs that no other Australian city finds.
Six and a half hours ahead of us. Half an hour behind Sydney for part of the year. A great deal of software, written carefully by people who thought about time zones, nonetheless assumes that a time zone offset is a whole number of hours. All of that code is correct for Sydney and wrong for Adelaide.
The half hour is where the bugs are
The pattern repeats across codebases that have nothing else in common.
An offset stored as an integer number of hours. A conversion written as arithmetic on a timestamp rather than a lookup against a time zone database. A truncation to the start of an hour used as a proxy for the start of a period. A cached "current offset" that is correct until the clocks move. Each of these produces a result that is right for most users and half an hour out for South Australia.
The symptom is characteristic and easy to misread: a date that is correct during the working day and wrong for an hour either side of midnight, or a figure that lands in the wrong reporting day for some users and not others. It is diagnosed by looking at who, not what - if the affected users are all in one state, the cause is the offset.
Formatting a date twice is the common Next.js version
There is a specific way this shows up in an App Router application, and it is worth naming because the error message points somewhere unhelpful.
A date formatted on the server uses the server's time zone. The same date formatted in the browser uses the visitor's. If both happen - server render, then hydration - the two disagree, and what surfaces is a hydration mismatch rather than a visibly wrong date. People then go looking for a rendering problem.
The rule that prevents it is to decide, per date, whose time zone it belongs in. A delivery window belongs in the customer's. A market close belongs in the exchange's. A report period belongs in the business's. Once that is decided, the date is formatted once, in the place that owns the decision, and the other side never reformats it. Why hydration mismatches happen covers the error itself.
Three behaviours in one country
A national Australian application has to cope with three different daylight saving behaviours at once.
South Australia and the eastern states move their clocks. Queensland does not. Western Australia does not. The practical consequence is that the gap between two Australian cities is not a constant, and anything that stores an offset rather than a named zone will be wrong for several months of each year.
So zones are stored by name, offsets are never stored, and anything scheduled nationally is evaluated per zone rather than once. That is unremarkable advice and it is ignored often enough that Adelaide keeps proving it.
Commercially
Scope fixed in writing before work starts, priced per project. The country-level ground - the privacy and breach regime, hosting expectations, invoicing - is on the Australia market page.
Invoiced by Codefacture Yazılım A.Ş. in Türkiye, in US dollars by bank transfer, with no Turkish VAT because exported services are exempt.
