ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScriptのUTC時刻変換方法を詳しく解説_JavaScriptスキル

JavaScriptのUTC時刻変換方法を詳しく解説_JavaScriptスキル

WBOY
WBOYオリジナル
2016-05-16 15:21:212541ブラウズ

1. はじめに
1. UTC: 協定世界時、協定世界時。
2. グリニッジ標準時 (GMT)
グリニッジ標準時 (GMT) は、ロンドン郊外にある王立グリニッジ天文台の標準時を指します。これは、本初子午線がそこを通過する経度として定義されているためです。 理論的には、グリニッジ標準時の正午は太陽がグリニッジ子午線を通過する時刻です。楕円軌道上での地球の動きは不均一であるため、この時間は実際の太陽時と 16 分異なる場合があります。 地球の毎日の自転はいくぶん不規則で、ゆっくりと減速しています。したがって、GMT は標準時間として使用されなくなりました。今日の標準時である協定世界時 (UTC) は、原子時計によって提供されます。 1924 年 2 月 5 日以来、グリニッジ天文台は時刻調整情報を 1 時間ごとに世界に送信してきました。 UTC は、標準 GMT によって提供される正確な時刻に基づいています。
GMT (グリニッジ標準時) - グリニッジ標準時は、19 世紀半ばの大英帝国の基準時間であり、事実上の世界基準時間でもありました。当時は 1840 年以降は主に鉄道システムに使用されていました。グリニッジ天文台の経度を経度 0 度として使用し、世界を 24 のタイムゾーンに分割しています。ある時期に外国人排斥、ナショナリズム、一部の反英国感情の影響を受けたことを除いて、その地位は一度も揺るがなかったのです。

GMT と UTC の違い
GMT ウォッチとは、2 つ以上のタイムゾーンの時刻を表示できる時計です。どのような方法を使用しても、複数のタイムゾーンを表示する最も直接的な方法は、1 つの時計ケースに複数のムーブメントを搭載することです。ただし、最も経済的で一般的な方法は、12 時間または 24 時間の時間目盛りが付いた回転ベゼルを取り付けることです。回転ベゼルの使用方法は非常に簡単で、第 2 タイムゾーンの時刻に対応するベゼルの数字を文字盤の時針に合わせ、時計回りに 1 時間回転させます。ヨーロッパ大陸時間を示し、反時計回りに 8 時間回すと、米国西海岸時間になります。
ダイヤル時刻を自宅時間に設定するか目的地時間に設定するかはユーザーの好みによって異なりますが、12 時間時計では昼と夜の区別がつかないため、通常は現地時間を設定する方が合理的です。 GMT の定義を複雑にする出来事が発生しました。1972 年 1 月 1 日、UTC (協定世界時) が新しい世界標準時になりました。
便宜上、通常は協定世界時として記録されます。また、便宜上、秒までの精度が必要ない場合、GMT と UTC は一般に同等であるとみなされます。 UTC の方が科学的で正確ですが、時計愛好家やコレクターの間では依然として GMT の方が人気があります。多くの人は、UTC はパリが世界の計時センターとしての地位を獲得するための手段であると信じています。実際、これは原子時間に基づいた、可能な限り世界時に近い時間測定システムです。その出現は、現代社会における正確なタイミングの必要性です。
原子時はこれまでの計時システムとは異なり、非常に正確であり、特定の場所の平均太陽時を基にしたものではありませんが、地球の回転速度が不均一である場合、原子時と世界時の時差は時間の経過とともに蓄積されます。したがって、UTC は、一定期間後に補正するために正または負のうるう秒が追加されます。したがって、協定世界時と国際原子時 (TAI) の間には、整数秒の差が生じます。パリにある国際地球回転問題中央事務局 (IERS) は、うるう秒をいつ追加するかを決定する責任を負っています。

北京時間はグリニッジ時間や UTC 時間とは異なる 8 つのタイムゾーンです。北京、上海、重慶は 8 番目の東ゾーンに位置するため、UTC 時間に換算すると北京時間 2013-1-1 0:00:00 となります。 : 2013 年 1 月 1 日火曜日 00 :00:00 UTC+0800、8 時間後。
2. 現地時間から UTC 時間への変換
現地時間から UTC 時間に変換する手順は次のとおりです:

1. 文字列の日付を日付データ型に変換します
すでに日付型である場合は、この手順を省略できます。

以下の例の関数を使用して変換できます。
2. UTC 日付データを取得します
年、月、日、時、分、秒を含めてgetUTC***()メソッドで取得します。

年を取得します: var y = date.getUTCFul Year();
月を取得します: var m = date.getUTCMonth();
日付を取得します: var d = date.getUTCDate();
時間を取得します: var h= date.getUTCHours();
分の取得: var M = date.getUTCMinutes();
秒の取得: var s = date.getUTCSeconds();

ここでの日付は日付型データです。

注: ここで UTC を使用しないメソッドを使用すると問題が発生します (例: date.getFullyear、date.getMonth)。次の変換を実行するときに結果エラーが発生します。

3. Date.UTC() 関数を使用して
を変換します。
手順 2 で取得した日付データを UTC 時間 (実際には 1700 からのミリ秒) に変換します

var utc = Date.UTC(y,m,d,h,M,s);

这里,y、m、d、h、M、s分别代表步骤2中获取的年、月、日、时、分、秒数值。

三、UTC日期到本地日期的转换
UTC日期到本地日期转换则要简单得多,先将UTC时间转换为日期格式,然后再转换为本地日期格式,例如:

var date2 = new Date(utc);

var localeString = date2.toLocaleString();

或只要日期

var localeDateString = date2.toLocaleDateString();

或只要时间

var localeTimeString = date2.toLocaleTimeString();

实例:

//日期加减计算 
function dateadd(sdate, delta, ymdh){ 
 if(!sdate ) return; 
  
 if(typeof sdate == 'object') sdate = sdate.toLocaleString(); 
 
 /(\d{4})[\D](\d{1,2})[\D](\d{1,2})[\D]?\s(\d{1,2}):(\d{1,2}):(\d{1,2})/.exec(sdate); 
 var a = [0,0,0,0]; 
  
 switch(ymdh){ 
  case 'y': 
   a = [delta, -1, 0, 0]; 
   break; 
  case 'm': 
   a=[0, delta-1, 0, 0]; 
   break; 
  case 'H': 
   a=[0, -1, 0, delta]; 
   break;  
  default: 
   a = [0, -1, delta, 0]; 
   break;   
 } 
  
 println('date:' + (parseInt(RegExp.$1)+ a[0]) + '-'+ (parseInt(RegExp.$2)+a[1]) +'-' + (parseInt(RegExp.$3)+a[2]) 
  + ' ' + (parseInt(RegExp.$4)+a[3]) +':' + RegExp.$5 + ':' +RegExp.$6); 
  
 return new Date(parseInt(RegExp.$1)+ a[0], parseInt(RegExp.$2)+a[1], parseInt(RegExp.$3)+a[2], parseInt(RegExp.$4)+a[3], RegExp.$5,RegExp.$6); 
} 
 
 //UTC转换 
 println('---------------------------------------------'); 
 var sdate='2013-01-01 00:00:00.0'; 
 var d = dateadd(sdate,0); 
 var d2 = Date.UTC(d.getUTCFullYear(),d.getUTCMonth() ,d.getUTCDate(),d.getUTCHours(),d.getUTCMinutes(),d.getUTCSeconds()); 
 println('原日期:' + sdate); 
 println('d2:' + d2); 
 println('d3:' + new Date(d2)); 
 println('d4:' + new Date(d2).toLocaleString()); 
 println('d5:' + d2.toLocaleString()); 

测试结果:

---------------------------------------------
date:2013-0-1 0:00:00
原日期:2013-01-01 00:00:00.0
d2:1356969600000
d3:Tue Jan 1 00:00:00 UTC+0800 2013
d4:2013年1月1日 0:00:00
d5:1,356,969,600,000.00

可以看到UTC时间实际上是一串以自1970年以来的毫秒数表示的长数字。

以上就是本文的全部内容,希望对大家的学习有所帮助。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。