JavaScript 获取时区
<p>在一个大型的项目中,不可避免会出现操作时间的业务,比如时间的格式化,比如时间的加减,我们一般会直接使用<code>moment.js</code>库来做,毕竟稳定可靠,也方便,那当我们系统只是几个简单页面,对时间的操作并不是很大,引入库文件并不是很必须的情况,我们需要时区展示怎么办?是不是可以用浏览器支持的原生方法来实现?</p><h2 id="时区">时区</h2>
<h3 id="啥是时区?">啥是时区?</h3>
<p>时区是地球上的区域使用同一个时间定义。以前,人们通过观察太阳的外置(时角)决定时间,这就使得不同经度的地方的时间各有不同,为了统一使用同一个时间,就引入了时区的概念。时区通过设立一个标准时间部分地解决了这个问题。世界各国位于地球的不同位置,因此不同国家,特别是东西跨度大的国家日出、日落时间必定有偏差,这些偏差就是时差。</p>
<h3 id="时区表示法">时区表示法</h3>
<p>协调世界时(UTC)是最主要的世界时间标准,其以院子时秒长为基础,在时刻上尽量接近于格林威治标准时间。协调世界时是世界上调调节时钟和时间的主要标准。如果时间是以协调世界时(UTC)表示,则在时间后面加上“Z”,“Z”是协调世界时中0时区的标志。UTC时间也叫祖鲁时间,因为在北约音标字母中用“Zulu”表示“Z”。</p>
<p>UTC偏移量的表示形式为:<code>±:</code>、<code>±</code>或者<code>±</code>。比如北京时间比协调世界时(UTC)早八小时,那么应当表示为:<code>UTC+8</code>。</p>
<h2 id="JavaScript获得当前客户端的时区">JavaScript获得当前客户端的时区</h2>
<p><code>Intl</code>对象是ECMAScript国际化API的一个命名空间,它提供了精确的字符串对比、数字格式化和日期格式化。我们需要使用这个API的<code>DateTimeFormat</code>对象。具体可以参考:MDN Intl.DateTimeFormat</p>
<p>获得客户端当前时区:</p>
<div class="table-container">
<div class="cnblogs_code">
<pre>Intl.DateTimeFormat().resolvedOptions().timeZone</pre>
</div>
<p> </p>
</div>
<p>可以看到输出:Asia/Shanghai,即我所在时区为上海。</p>
<p>我们知道了在哪个时区,但是我们需要同时表示UTC+n的形式,那我们怎么知道当前时区的UTC偏移量呢?</p>
<p>我们可以通过<code>Date</code>对象实例的<code>getTimezoneOffset</code>方法获取(注意返回的结果的单位为分):</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">new</span> Date().getTimezoneOffset()</pre>
</div>
<p> </p>
<p>可以看到输出的是<code>-480</code>,这样获得到的是0时区的时间差(0时区减去当前所在时区,单位是分钟)。</p>
<p>中国标准时间是以东八区为准,比0时区的时间要早8小时。所以是-480,除以60就是所在时区:然后<code>-480 / 60 = -8</code>,即现在这个时区的偏移量为<code>0 - (-8) = 8</code>,即表示为:<code>UTC+8</code> ,代码为:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">UTC+</span><span style="color: rgba(128, 0, 0, 1)">'</span> + (<span style="color: rgba(128, 0, 128, 1)">0</span> - <span style="color: rgba(0, 0, 255, 1)">new</span> Date().getTimezoneOffset() / <span style="color: rgba(128, 0, 128, 1)">60</span>); <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 输出:UTC+8</span></pre>
</div>
<p> </p>
<p>需要注意的是,不管你以何参数实例化一个<code>Date</code>对象,js在本地存储时,都会转化为本地时区,js不会帮你存储实例化该日期时的时区信息。</p>
<p>相比较来说,<code>moment.js</code>是一个很好的时间处理的库,如果有时间操作的业务还是直接使用<code>moment.js</code>库方便一点,当然,只是显示一下时区之类的,可以直接用上面简单处理即可。</p>
<p> </p>
<p>转发:https://blog.tcs-y.com/2020/01/30/js-time-zone/</p>
<p> </p><br><br>
来源:https://www.cnblogs.com/doudouzi/p/13639465.html
頁:
[1]