<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>GlideDateTime on SNow adventures</title>
    <link>https://www.snow-adventures.com/tags/glidedatetime/</link>
    <description>Recent content in GlideDateTime on SNow adventures</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <copyright>© Samuel Meylan - 2020</copyright>
    <lastBuildDate>Thu, 12 Jun 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://www.snow-adventures.com/tags/glidedatetime/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Working with ISO 8601 Dates in ServiceNow</title>
      <link>https://www.snow-adventures.com/posts/working-with-iso-8601-dates-in-servicenow/</link>
      <pubDate>Thu, 12 Jun 2025 00:00:00 +0000</pubDate>
      
      <guid>https://www.snow-adventures.com/posts/working-with-iso-8601-dates-in-servicenow/</guid>
      <description>Convert between GlideDateTime and ISO 8601 date strings in ServiceNow with simple, reusable functions.</description>
      <content:encoded><![CDATA[<h1 id="introduction">Introduction</h1>
<p>The ISO 8601 format is a widely used standard for representing date and time, particularly useful when exchanging time-related information across systems.</p>
<p>In ServiceNow, you often need to interact with external systems or APIs that use ISO 8601 for date representation. However, ServiceNow mainly uses GlideDateTime objects for handling dates and times. These functions bridge that gap, allowing seamless conversion between the two formats.</p>
<p>An ISO 8601 string typically looks like this: <code>1977-04-22T06:00:00Z</code>. The <code>Z</code> suffix stands for <strong>Zulu time</strong>, which corresponds to <strong>UTC</strong>.</p>
<p>Handling these date strings in ServiceNow can be a bit tricky. In this post, I’ll show two simple functions to convert back and forth between <code>GlideDateTime</code> and ISO 8601 strings.</p>
<h2 id="convert-a-glidedatetime-to-iso-8601">Convert a <code>GlideDateTime</code> to ISO 8601</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="cm">/*
</span></span></span><span class="line"><span class="cl"><span class="cm">@name convertToISODate
</span></span></span><span class="line"><span class="cl"><span class="cm">@description Convert from GlideDateTime to ISO string
</span></span></span><span class="line"><span class="cl"><span class="cm">@param {GlideDateTime} [gdt] - GlideDateTime object to be converted
</span></span></span><span class="line"><span class="cl"><span class="cm">@return {String} Date Time formatted in ISO Date (ISO 8601)
</span></span></span><span class="line"><span class="cl"><span class="cm">*/</span>
</span></span><span class="line"><span class="cl"><span class="kd">function</span> <span class="nx">convertToISODate</span><span class="p">(</span><span class="nx">gdt</span><span class="p">){</span>
</span></span><span class="line"><span class="cl">	<span class="k">try</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="c1">// convert to milliseconds
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>		<span class="kd">var</span> <span class="nx">ms</span> <span class="o">=</span> <span class="nx">gdt</span><span class="p">.</span><span class="nx">getNumericValue</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">		<span class="c1">// convert to ISO 8601 string
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>		<span class="kd">var</span> <span class="nx">isoStr</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">(</span><span class="nx">ms</span><span class="p">).</span><span class="nx">toISOString</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">		<span class="k">return</span> <span class="nx">isoStr</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="nx">exception</span><span class="p">){</span>
</span></span><span class="line"><span class="cl">		<span class="nx">gs</span><span class="p">.</span><span class="nx">error</span><span class="p">(</span><span class="s1">&#39;Error converting GlideDateTime to ISO date: &#39;</span> <span class="o">+</span> <span class="nx">exception</span><span class="p">.</span><span class="nx">message</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">		<span class="k">return</span> <span class="kc">null</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h2 id="convert-an-iso-8601-string-to-glidedatetime">Convert an ISO 8601 string to <code>GlideDateTime</code></h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="cm">/*
</span></span></span><span class="line"><span class="cl"><span class="cm">@name convertISODateToGlideDateTime
</span></span></span><span class="line"><span class="cl"><span class="cm">@description Convert from ISO string to GlideDateTime
</span></span></span><span class="line"><span class="cl"><span class="cm">@param {String} [isoStr] - ISO string (ISO 8601)
</span></span></span><span class="line"><span class="cl"><span class="cm">@return {GlideDateTime} GlideDateTime object
</span></span></span><span class="line"><span class="cl"><span class="cm">*/</span>
</span></span><span class="line"><span class="cl"><span class="kd">function</span> <span class="nx">convertISODateToGlideDateTime</span><span class="p">(</span><span class="nx">isoStr</span><span class="p">){</span>
</span></span><span class="line"><span class="cl">	<span class="k">try</span><span class="p">{</span>
</span></span><span class="line"><span class="cl">		<span class="c1">// convert to JavaScript Date
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>		<span class="kd">var</span> <span class="nx">newDate</span> <span class="o">=</span> <span class="k">new</span> <span class="nb">Date</span><span class="p">(</span><span class="nx">isoStr</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">		<span class="c1">// extract milliseconds
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>		<span class="kd">var</span> <span class="nx">ms</span> <span class="o">=</span> <span class="nx">newDate</span><span class="p">.</span><span class="nx">getTime</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">		<span class="c1">// create GlideDateTime and set value
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>		<span class="kd">var</span> <span class="nx">newGdt</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">GlideDateTime</span><span class="p">();</span>
</span></span><span class="line"><span class="cl">		<span class="nx">newGdt</span><span class="p">.</span><span class="nx">setValue</span><span class="p">(</span><span class="nx">ms</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">		<span class="k">return</span> <span class="nx">newGdt</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="nx">exception</span><span class="p">){</span>
</span></span><span class="line"><span class="cl">		<span class="nx">gs</span><span class="p">.</span><span class="nx">error</span><span class="p">(</span><span class="s1">&#39;Error converting ISO date to GlideDateTime: &#39;</span> <span class="o">+</span> <span class="nx">exception</span><span class="p">.</span><span class="nx">message</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">		<span class="k">return</span> <span class="kc">null</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">	<span class="p">}</span>   
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><h2 id="testing-the-functions">Testing the Functions</h2>
<p>You can test both functions using a quick script. This script grabs the current date/time, converts it to ISO 8601, and then back to a <code>GlideDateTime</code> object.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="kd">var</span> <span class="nx">gdt</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">GlideDateTime</span><span class="p">();</span>
</span></span><span class="line"><span class="cl"><span class="kd">var</span> <span class="nx">isoStr</span> <span class="o">=</span> <span class="nx">convertToISODate</span><span class="p">(</span><span class="nx">gdt</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="kd">var</span> <span class="nx">newGdt</span> <span class="o">=</span> <span class="nx">convertISODateToGlideDateTime</span><span class="p">(</span><span class="nx">isoStr</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">gs</span><span class="p">.</span><span class="nx">info</span><span class="p">(</span><span class="s2">&#34;Original GlideDateTime: &#34;</span> <span class="o">+</span> <span class="nx">gdt</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="nx">gs</span><span class="p">.</span><span class="nx">info</span><span class="p">(</span><span class="s2">&#34;ISO string: &#34;</span> <span class="o">+</span> <span class="nx">isoStr</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="nx">gs</span><span class="p">.</span><span class="nx">info</span><span class="p">(</span><span class="s2">&#34;GlideDateTime converted back from ISO: &#34;</span> <span class="o">+</span> <span class="nx">newGdt</span><span class="p">);</span>
</span></span></code></pre></div><p>which gives this output:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Original GlideDateTime: 2025-06-13 12:53:27
</span></span><span class="line"><span class="cl">ISO string: 2025-06-13T12:53:27.359Z
</span></span><span class="line"><span class="cl">GlideDateTime converted back from ISO: 2025-06-13 12:53:27
</span></span></code></pre></div><blockquote>
<h3 id="notes">Notes</h3>
<p><code>GlideDateTime</code> does not retain milliseconds, so precision beyond seconds is lost in the round-trip conversion. This is because GlideDateTime has a precision of one second. If millisecond precision is crucial for your use case, you may need to store the millisecond information separately or use a different date handling method.
For example:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-javascript" data-lang="javascript"><span class="line"><span class="cl"><span class="kd">let</span> <span class="nx">iso2</span> <span class="o">=</span> <span class="s2">&#34;2025-06-13T13:09:34.000Z&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">gs</span><span class="p">.</span><span class="nx">info</span><span class="p">(</span><span class="nx">convertISODateToGlideDateTime</span><span class="p">(</span><span class="nx">iso2</span><span class="p">))</span> <span class="c1">//--&gt; 2025-06-13 13:09:34
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kd">let</span> <span class="nx">iso3</span> <span class="o">=</span> <span class="s2">&#34;2025-06-13T13:09:34.999Z&#34;</span>
</span></span><span class="line"><span class="cl"><span class="nx">gs</span><span class="p">.</span><span class="nx">info</span><span class="p">(</span><span class="nx">convertISODateToGlideDateTime</span><span class="p">(</span><span class="nx">iso3</span><span class="p">))</span> <span class="c1">//--&gt; 2025-06-13 13:09:34
</span></span></span></code></pre></div></blockquote>
<h2 id="references">References</h2>
<ul>
<li><a href="https://en.wikipedia.org/wiki/ISO_8601">ISO 8601 Data and Time format - Wikipedia</a></li>
<li><a href="https://developer.servicenow.com/dev.do#!/reference/api/yokohama/server/no-namespace/c_GlideDateTimeScoped#r_ScopedGlideDateTimeNumericValue?">GlideDateTime | ServiceNow Developers</a></li>
<li><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString">Date.prototype.toISOString() - JavaScript | MDN</a></li>
</ul>]]></content:encoded>
    </item>
    
  </channel>
</rss>
