UNPKG

luxon

Version:
166 lines (139 loc) 5.24 kB
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <base data-ice="baseUrl" href="../../../"> <title data-ice="title">Luxon</title> <link type="text/css" rel="stylesheet" href="css/style.css"> <link type="text/css" rel="stylesheet" href="css/prettify-tomorrow.css"> <script src="script/prettify/prettify.js"></script> <script src="script/manual.js"></script> <link data-ice="userStyle" rel="stylesheet" href="user/css/0-styles.css"> </head> <body class="layout-container" data-ice="rootContainer"> <header><span class="luxon-title">Luxon</span> <a href="./">Home</a> <a href="identifiers.html">Reference</a> <a href="source.html">Source</a> <a data-ice="repoURL" href="https://github.com/icambron/luxon" class="repo-url-github">Repository</a> <div class="search-box"> <span> <img src="./image/search.png"> <span class="search-input-edge"></span><input class="search-input"><span class="search-input-edge"></span> </span> <ul class="search-result"></ul> </div> </header> <nav class="navigation" data-ice="nav"><div> <ul> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/datetime.js~DateTime.html">DateTime</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/duration.js~Duration.html">Duration</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/info.js~Info.html">Info</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/interval.js~Interval.html">Interval</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-class">C</span><span data-ice="name"><span><a href="class/src/settings.js~Settings.html">Settings</a></span></span></li> <li data-ice="doc"><span data-ice="kind" class="kind-interface">I</span><span data-ice="name"><span><a href="class/src/zone.js~Zone.html">Zone</a></span></span></li> </ul> </div> </nav> <div class="content" data-ice="content"><h1 data-ice="title">src/zones/IANAZone.js</h1> <pre class="source-code line-number raw-source-code"><code class="prettyprint linenums" data-ice="content">import { Util } from &apos;../impl/util&apos;; import { Zone } from &apos;../zone&apos;; const typeToPos = { year: 0, month: 1, day: 2, hour: 3, minute: 4, second: 5 }; function hackyOffset(dtf, date) { const formatted = dtf.format(date), parsed = /(\d+)\/(\d+)\/(\d+), (\d+):(\d+):(\d+)/.exec(formatted), [, fMonth, fDay, fYear, fHour, fMinute, fSecond] = parsed; return [fYear, fMonth, fDay, fHour, fMinute, fSecond]; } function partsOffset(dtf, date) { const formatted = dtf.formatToParts(date), filled = []; for (let i = 0; i &lt; formatted.length; i++) { const { type, value } = formatted[i], pos = typeToPos[type]; if (!Util.isUndefined(pos)) { filled[pos] = parseInt(value, 10); } } return filled; } function isValid(zone) { try { new Intl.DateTimeFormat(&apos;en-US&apos;, { timeZone: zone }).format(); return true; } catch (e) { return false; } } /** * @private */ export class IANAZone extends Zone { static isValidSpecier(s) { return s &amp;&amp; s.match(/[a-z_]+\/[a-z_]+/i); } constructor(name) { super(); this.zoneName = name; this.valid = isValid(name); } get type() { return &apos;iana&apos;; } get name() { return this.zoneName; } get universal() { return false; } offsetName(ts, { format = &apos;long&apos;, locale = &apos;en-US&apos; } = {}) { return Util.parseZoneInfo(ts, format, locale || &apos;en-US&apos;, this.zoneName); } offset(ts) { const date = new Date(ts), dtf = new Intl.DateTimeFormat(&apos;en-US&apos;, { hour12: false, timeZone: this.zoneName, year: &apos;numeric&apos;, month: &apos;2-digit&apos;, day: &apos;2-digit&apos;, hour: &apos;2-digit&apos;, minute: &apos;2-digit&apos;, second: &apos;2-digit&apos; }), [fYear, fMonth, fDay, fHour, fMinute, fSecond] = dtf.formatToParts ? partsOffset(dtf, date) : hackyOffset(dtf, date), asUTC = Date.UTC(fYear, fMonth - 1, fDay, fHour, fMinute, fSecond); let asTS = date.valueOf(); asTS -= asTS % 1000; return (asUTC - asTS) / (60 * 1000); } equals(otherZone) { return otherZone.type === &apos;iana&apos; &amp;&amp; otherZone.zoneName === this.zoneName; } get isValid() { return this.valid; } } </code></pre> </div> <footer class="footer"> Generated by <a href="https://esdoc.org">ESDoc<span data-ice="esdocVersion">(0.5.2)</span><img src="./image/esdoc-logo-mini-black.png"></a> </footer> <script src="script/search_index.js"></script> <script src="script/search.js"></script> <script src="script/pretty-print.js"></script> <script src="script/inherited-summary.js"></script> <script src="script/test-summary.js"></script> <script src="script/inner-link.js"></script> <script src="script/patch-for-local.js"></script> </body> </html>