This PR changes the way that ticks for datetime axes are located and formatted b…y default. The new tick formatting reduces the amount of redundant information by printing time on a separate line from date (if time is different from 0). This way, the date only has to be shown whenever it changes from tick to tick. Similarly, only the time component of the tick step size is usually shown, unless there's a step in the parent component. For example, seconds would be shown `:58`, `:59` but then as the minute changes, the full time is shown like `03:17:00` and then further `:01`, `:02`, etc.
Fixes https://github.com/MakieOrg/Makie.jl/issues/4404, fixes https://github.com/MakieOrg/Makie.jl/issues/3972, fixes https://github.com/MakieOrg/Makie.jl/issues/3959
## This PR
```julia
f = Figure(size = (600, 800))
data = cumsum(randn(12))
for (i, T) in enumerate([Year, Month, Day, Hour, Minute, Second, Millisecond])
times = DateTime(2025, 06, 30, 17, 54, 56, 993) .+ T.(1:12)
lines(f[i, 1], times, data)
Label(f[i, 2], "$T", rotation = pi/2, font = :bold, tellheight = false)
end
f
```
<img width="712" alt="image" src="https://github.com/user-attachments/assets/4dd14a28-b559-4d88-8f5a-7536370b282a" />
## Master
<img width="712" alt="image" src="https://github.com/user-attachments/assets/2c54bf43-c18f-4b4c-b672-c2e7cd2c63aa" />
This PR also adds a separate dispatch route for datetime ticks which fixes the bug that the ticks or the tick format could not be changed manually and were always hardcoded to the automatic tick finding algorithm.
```julia
dates = Date(2025, 06, 30) .+ Day.(1:5)
data = cumsum(randn(5))
with_theme(Axis = (; yticksvisible = false, yticklabelsvisible = false, ygridvisible = false)) do
f = Figure()
lines(f[1, 1], dates, data)
lines(f[2, 1], dates, data; axis = (; xticks = (dates[[1, 2, 3, 5]], ["A", "B", "C", "E"])))
lines(f[3, 1], dates, data; axis = (; xtickformat = "e, d.m.yyyy"))
f
end
```
<img width="712" alt="image" src="https://github.com/user-attachments/assets/eae3070b-b389-4982-9bea-f4d070abd646" />