{"id":1400,"date":"2026-08-21T18:00:00","date_gmt":"2026-08-21T17:00:00","guid":{"rendered":"https:\/\/wade.one\/blog\/?p=1400"},"modified":"2026-08-21T18:00:00","modified_gmt":"2026-08-21T17:00:00","slug":"node-js-26-finally-makes-temporal-the-normal-date-api","status":"publish","type":"post","link":"https:\/\/wade.one\/blog\/2026\/08\/21\/node-js-26-finally-makes-temporal-the-normal-date-api\/","title":{"rendered":"Node.js 26 Finally Makes Temporal the Normal Date API"},"content":{"rendered":"<p>JavaScript&#8217;s <code>Date<\/code> object has spent decades making ordinary time handling feel more dangerous than it should. It is mutable, mixes several ideas into one type, and makes timezone mistakes remarkably easy. Libraries filled the gap because they had to. Node.js 26 enabling Temporal by default is therefore much more than a tidy API addition.<\/p>\n<p>The <a href=\"https:\/\/nodejs.org\/en\/blog\/release\/v26.0.0\">Node.js 26 release announcement<\/a> lists Temporal as a headline change. Instead of treating every value as a variation of one awkward object, Temporal has distinct types for instants, calendar dates, times, durations, and zoned date-times. The names are longer, but the intent is much clearer, and explicit intent is exactly what date code needs.<\/p>\n<p>I would not rewrite stable production date handling just to use the newest thing, especially while Node 26 remains the Current line before entering LTS in October. I would start testing dependencies and use Temporal for new code where the deployment target is controlled. For libraries or applications supporting older runtimes, a compatibility plan is still needed rather than assuming the global API exists everywhere.<\/p>\n<p>The important bit is that new JavaScript can finally begin from a better default. Dates and timezones will never be simple, because the real world is not simple. At least the standard runtime can now represent that complexity directly instead of asking every project to bolt on its own answer.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Node.js 26 enables Temporal by default, giving new JavaScript code a better starting point than the old Date object.<\/p>\n","protected":false},"author":0,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[13],"tags":[224,135,222,223],"class_list":["post-1400","post","type-post","status-publish","format-standard","hentry","category-programming","tag-dates","tag-javascript","tag-node-js","tag-temporal"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Node.js 26 Finally Makes Temporal the Normal Date API - wade.one<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wade.one\/blog\/2026\/08\/21\/node-js-26-finally-makes-temporal-the-normal-date-api\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Node.js 26 Finally Makes Temporal the Normal Date API - wade.one\" \/>\n<meta property=\"og:description\" content=\"Node.js 26 enables Temporal by default, giving new JavaScript code a better starting point than the old Date object.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wade.one\/blog\/2026\/08\/21\/node-js-26-finally-makes-temporal-the-normal-date-api\/\" \/>\n<meta property=\"og:site_name\" content=\"wade.one\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-21T17:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/Wade-Logo-cropped.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1518\" \/>\n\t<meta property=\"og:image:height\" content=\"1506\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@wadewomersley\" \/>\n<meta name=\"twitter:site\" content=\"@wadewomersley\" \/>\n<meta name=\"twitter:label1\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/08\\\/21\\\/node-js-26-finally-makes-temporal-the-normal-date-api\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/08\\\/21\\\/node-js-26-finally-makes-temporal-the-normal-date-api\\\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"Node.js 26 Finally Makes Temporal the Normal Date API\",\"datePublished\":\"2026-08-21T17:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/08\\\/21\\\/node-js-26-finally-makes-temporal-the-normal-date-api\\\/\"},\"wordCount\":232,\"publisher\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#\\\/schema\\\/person\\\/8b4739f8f8bb2cff5d792d4b8779fcc3\"},\"keywords\":[\"dates\",\"javascript\",\"node-js\",\"temporal\"],\"articleSection\":[\"Programming\"],\"inLanguage\":\"en-GB\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/08\\\/21\\\/node-js-26-finally-makes-temporal-the-normal-date-api\\\/\",\"url\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/08\\\/21\\\/node-js-26-finally-makes-temporal-the-normal-date-api\\\/\",\"name\":\"Node.js 26 Finally Makes Temporal the Normal Date API - wade.one\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#website\"},\"datePublished\":\"2026-08-21T17:00:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/08\\\/21\\\/node-js-26-finally-makes-temporal-the-normal-date-api\\\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/08\\\/21\\\/node-js-26-finally-makes-temporal-the-normal-date-api\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/2026\\\/08\\\/21\\\/node-js-26-finally-makes-temporal-the-normal-date-api\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/wade.one\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Node.js 26 Finally Makes Temporal the Normal Date API\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/wade.one\\\/blog\\\/\",\"name\":\"wade.one\",\"description\":\"wade womersley - york based software engineer\",\"publisher\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#\\\/schema\\\/person\\\/8b4739f8f8bb2cff5d792d4b8779fcc3\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/wade.one\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/#\\\/schema\\\/person\\\/8b4739f8f8bb2cff5d792d4b8779fcc3\",\"name\":\"Wade Womersley\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/200px.png\",\"url\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/200px.png\",\"contentUrl\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/200px.png\",\"width\":202,\"height\":200,\"caption\":\"Wade Womersley\"},\"logo\":{\"@id\":\"https:\\\/\\\/wade.one\\\/blog\\\/wp-content\\\/uploads\\\/2015\\\/02\\\/200px.png\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Node.js 26 Finally Makes Temporal the Normal Date API - wade.one","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wade.one\/blog\/2026\/08\/21\/node-js-26-finally-makes-temporal-the-normal-date-api\/","og_locale":"en_GB","og_type":"article","og_title":"Node.js 26 Finally Makes Temporal the Normal Date API - wade.one","og_description":"Node.js 26 enables Temporal by default, giving new JavaScript code a better starting point than the old Date object.","og_url":"https:\/\/wade.one\/blog\/2026\/08\/21\/node-js-26-finally-makes-temporal-the-normal-date-api\/","og_site_name":"wade.one","article_published_time":"2026-08-21T17:00:00+00:00","og_image":[{"width":1518,"height":1506,"url":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/Wade-Logo-cropped.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_creator":"@wadewomersley","twitter_site":"@wadewomersley","twitter_misc":{"Estimated reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wade.one\/blog\/2026\/08\/21\/node-js-26-finally-makes-temporal-the-normal-date-api\/#article","isPartOf":{"@id":"https:\/\/wade.one\/blog\/2026\/08\/21\/node-js-26-finally-makes-temporal-the-normal-date-api\/"},"author":{"name":"","@id":""},"headline":"Node.js 26 Finally Makes Temporal the Normal Date API","datePublished":"2026-08-21T17:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/wade.one\/blog\/2026\/08\/21\/node-js-26-finally-makes-temporal-the-normal-date-api\/"},"wordCount":232,"publisher":{"@id":"https:\/\/wade.one\/blog\/#\/schema\/person\/8b4739f8f8bb2cff5d792d4b8779fcc3"},"keywords":["dates","javascript","node-js","temporal"],"articleSection":["Programming"],"inLanguage":"en-GB"},{"@type":"WebPage","@id":"https:\/\/wade.one\/blog\/2026\/08\/21\/node-js-26-finally-makes-temporal-the-normal-date-api\/","url":"https:\/\/wade.one\/blog\/2026\/08\/21\/node-js-26-finally-makes-temporal-the-normal-date-api\/","name":"Node.js 26 Finally Makes Temporal the Normal Date API - wade.one","isPartOf":{"@id":"https:\/\/wade.one\/blog\/#website"},"datePublished":"2026-08-21T17:00:00+00:00","breadcrumb":{"@id":"https:\/\/wade.one\/blog\/2026\/08\/21\/node-js-26-finally-makes-temporal-the-normal-date-api\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wade.one\/blog\/2026\/08\/21\/node-js-26-finally-makes-temporal-the-normal-date-api\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/wade.one\/blog\/2026\/08\/21\/node-js-26-finally-makes-temporal-the-normal-date-api\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wade.one\/blog\/"},{"@type":"ListItem","position":2,"name":"Node.js 26 Finally Makes Temporal the Normal Date API"}]},{"@type":"WebSite","@id":"https:\/\/wade.one\/blog\/#website","url":"https:\/\/wade.one\/blog\/","name":"wade.one","description":"wade womersley - york based software engineer","publisher":{"@id":"https:\/\/wade.one\/blog\/#\/schema\/person\/8b4739f8f8bb2cff5d792d4b8779fcc3"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wade.one\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":["Person","Organization"],"@id":"https:\/\/wade.one\/blog\/#\/schema\/person\/8b4739f8f8bb2cff5d792d4b8779fcc3","name":"Wade Womersley","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/200px.png","url":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/200px.png","contentUrl":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/200px.png","width":202,"height":200,"caption":"Wade Womersley"},"logo":{"@id":"https:\/\/wade.one\/blog\/wp-content\/uploads\/2015\/02\/200px.png"}}]}},"jetpack_publicize_connections":[],"jetpack_sharing_enabled":true,"jetpack-related-posts":[{"id":1253,"url":"https:\/\/wade.one\/blog\/2026\/05\/04\/the-node-js-release-schedule-change-is-good-for-production-teams\/","url_meta":{"origin":1400,"position":0},"title":"The Node.js Release Schedule Change Is Good for Production Teams","author":"","date":"May 4, 2026","format":false,"excerpt":"Node.js moving toward one major release per year should make production planning simpler for teams that already care about LTS stability.","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/wade.one\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1118,"url":"https:\/\/wade.one\/blog\/2023\/03\/26\/expanding-on-performance-of-redis-vs-mongodb-for-a-push-pull-system\/","url_meta":{"origin":1400,"position":1},"title":"Expanding on performance of Redis vs MongoDB for a push\/pull system","author":"Wade","date":"March 26, 2023","format":false,"excerpt":"When it comes to building a push\/pop system, both Redis and MongoDB can be used as effective solutions. However, there are a few key differences between these two databases that can impact which one you choose for your system. Redis is an in-memory data structure store that can be used\u2026","rel":"","context":"In &quot;PHP&quot;","block_context":{"text":"PHP","link":"https:\/\/wade.one\/blog\/category\/php\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1149,"url":"https:\/\/wade.one\/blog\/2026\/03\/25\/typescript-6-0-is-out-what-actually-matters\/","url_meta":{"origin":1400,"position":2},"title":"TypeScript 6.0 Is Out: What Actually Matters","author":"Wade","date":"March 25, 2026","format":false,"excerpt":"TypeScript 6.0 is now live, but the main story is not flashy syntax. It is the upgrade work you should do now before TypeScript 7 lands.","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/wade.one\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1115,"url":"https:\/\/wade.one\/blog\/2023\/03\/26\/mongodb-vs-documentdb\/","url_meta":{"origin":1400,"position":3},"title":"MongoDB vs DocumentDB","author":"Wade","date":"March 26, 2023","format":false,"excerpt":"I've been working on a new as-fast-as-possible platform for a specific situation I can't go in to right now but I wanted to use MongoDB, however, I needed to reduce costs and use AWS so I wanted to use DocumentDB and needed to compare. Sadly DocumentDB does not cover 100%\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/wade.one\/blog\/category\/programming\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":337,"url":"https:\/\/wade.one\/blog\/2009\/11\/18\/superb-vps-virtual-private-server-provider-vps-net\/","url_meta":{"origin":1400,"position":4},"title":"Superb VPS (Virtual Private Server) Provider &#8211; VPS.net Review","author":"Wade","date":"November 18, 2009","format":false,"excerpt":"A few months ago at work we realised the need for lots of \"nodes\" (servers) in the UK and in the US initially. We have a lot of data processing that we need to do and we worked out it would be faster and cheaper if we could distribute the\u2026","rel":"","context":"In &quot;Hardware&quot;","block_context":{"text":"Hardware","link":"https:\/\/wade.one\/blog\/category\/hardware\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1376,"url":"https:\/\/wade.one\/blog\/2026\/07\/15\/codeql-system-prompt-injection-query-is-a-useful-start\/","url_meta":{"origin":1400,"position":5},"title":"CodeQL&#8217;s System Prompt Injection Query Is a Useful Start","author":"Wade","date":"July 15, 2026","format":false,"excerpt":"CodeQL 2.26 can trace untrusted values into JavaScript and TypeScript system prompts, turning one AI security risk into something code review can see.","rel":"","context":"In &quot;AI&quot;","block_context":{"text":"AI","link":"https:\/\/wade.one\/blog\/category\/ai\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts\/1400","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/comments?post=1400"}],"version-history":[{"count":1,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts\/1400\/revisions"}],"predecessor-version":[{"id":1420,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/posts\/1400\/revisions\/1420"}],"wp:attachment":[{"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/media?parent=1400"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/categories?post=1400"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wade.one\/blog\/wp-json\/wp\/v2\/tags?post=1400"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}