{{/* Ported from templates/city.html.j2. Extra data (built by the handler inside unit_scope(default_unit), as content.py's city_page did): .Breadcrumb; .City (needs .Slug); .Display/.Name string; .YearRange [2]int; .NYears int; .Months []{Name, Slug string; HighF, LowF, RangeLoF, RangeHiF *float64; High, Low, Precip template.HTML; Bar *{Left, Width string; C1, C2 string}} — Bar.Left/Width are STRINGS pre-formatted to Python's repr of round(x, 1) ("36.0", not "36"): Go's %v drops the ".0" and the golden diff would catch it; .Warmest/.Coldest/.Wettest *month (entries of .Months, or nil); .Records contentapi.AllTimeRecords (raw floats; .Fmt.Temp in-template); .Today *{Date string; Cards []{Label, Grade, Cls string; Value template.HTML; Percentile *float64}}; .Flavor *{Extract string; URL string}; .Event *{Text string; URL string}; .ToolHref string (full "{base}/#{lat:.5f},{lon:.5f}" href — composed inline, html/template's fragment urlEscaper would %-escape the comma); .CompareURL string ("{base}/compare#loc={lat:.4f},{lon:.4f}"); .JSONLDStr template.JS (compacted raw payload bytes — the |safe site; trusted backend-owned JSON-LD, never re-marshaled through a Go map). */}}{{template "base_head_start" .}}{{template "base_head_end" .}}{{template "base_body_start" .}}{{template "breadcrumb" .}}

{{.Display}} climate

Average temperatures, precipitation and all-time records for {{.Display}}, with every day graded against ~{{.NYears}} years of local climate history ({{index .YearRange 0}}–{{index .YearRange 1}}).{{if and .Warmest .Coldest}} Its warmest month is {{.Warmest.Name}}, averaging a high of {{.Warmest.High}}, and its coldest is {{.Coldest.Name}}, with an average low of {{.Coldest.Low}}.{{end}}

{{if .Flavor}}

{{.Flavor.Extract}}{{if .Flavor.URL}} via Wikipedia{{end}}

{{end}} {{if .Today}}

How today compares

Latest recorded day: {{.Today.Date}}. Each reading placed on {{.Display}}'s own ±7-day seasonal distribution.

{{range .Today.Cards}}
{{.Label}} {{.Value}} {{if .Percentile}}{{.Grade}} · {{ordinal .Percentile}} pct {{else}}{{.Grade}}{{end}}
{{end}}

Open {{.Name}} in the live weather grader →

{{end}} {{if .Event}}

Notable weather in {{.Name}}

{{.Event.Text}}{{if .Event.URL}} Read more →{{end}}

{{end}}

{{.Name}} average temperatures by month

Typical daily high and low, and average precipitation, for each month in {{.Display}}, based on {{index .YearRange 0}}–{{index .YearRange 1}} records. {{if .Wettest}}The wettest month is {{.Wettest.Name}} ({{.Wettest.Precip}} on an average day).{{end}}

{{range .Months}} {{end}}
MonthAvg highAvg lowAvg precip
{{.Name}} {{.High}} {{.Low}} {{.Precip}}

Each bar spans the 10th-percentile daily low to the 90th-percentile daily high (the range most days fall within), coloured cold → hot on a shared {{.Fmt.Temp -10.0}} to {{.Fmt.Temp 115.0}} scale, so the whole year's rhythm reads at a glance.

Thinking of visiting {{.Name}}?

Trips live and die by the weather. See how {{.Name}}'s comfort stacks up against where you live. {{.Name}} is pre-loaded, just add your city.

Compare {{.Name}}'s comfort with your city →

{{if or .Records.Tmax .Records.Tmin}}

Record extremes

All {{.Name}} weather records →

{{end}}

Percentiles compare each day to {{.Display}}'s own history, so grades are relative to this location: a “Near Record” day here isn't the same temperature as elsewhere. How the grades work →

{{template "base_body_end" .}}{{template "base_scripts_default" .}}{{template "base_tail" .}}