{"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_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"_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.8 - 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":1149,"url":"https:\/\/wade.one\/blog\/2026\/03\/25\/typescript-6-0-is-out-what-actually-matters\/","url_meta":{"origin":1400,"position":1},"title":"TypeScript 6.0 Is Out: What Actually Matters","author":"","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":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":2},"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":1298,"url":"https:\/\/wade.one\/blog\/2026\/05\/10\/php-8-5-clone-with-makes-value-objects-less-annoying\/","url_meta":{"origin":1400,"position":3},"title":"PHP 8.5 Clone With Makes Value Objects Less Annoying","author":"Wade","date":"May 10, 2026","format":false,"excerpt":"PHP 8.5's clone-with syntax makes immutable value objects easier to work with, especially around readonly properties.","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":1296,"url":"https:\/\/wade.one\/blog\/2026\/05\/08\/php-8-5s-uri-extension-fixes-a-real-web-problem\/","url_meta":{"origin":1400,"position":4},"title":"PHP 8.5&#8217;s URI Extension Fixes a Real Web Problem","author":"","date":"May 8, 2026","format":false,"excerpt":"PHP 8.5's new URI extension is not flashy, but it gives PHP a better built-in answer for parsing modern URLs.","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":573,"url":"https:\/\/wade.one\/blog\/2012\/02\/05\/regular-expression-regex-for-date-part-extractionarray-split\/","url_meta":{"origin":1400,"position":5},"title":"Regular Expression (Regex) For Date part extraction\/array split","author":"Wade","date":"February 5, 2012","format":false,"excerpt":"Needed to use this recently to create a specificity parameter for an API at work, it gives you a key\/value array from an ISO date string regardless of what is actually set in the string (e.g. if you give 2011-06-07 04 you'll get an array back as array('year'=>2011, 'month' =>\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":[]}],"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}]}}