Numbers and dates

by 1 contributor:

This article is in need of an editorial review.

This translation is incomplete. Please help translate this article from English.

この章では、JavaScriptで数値と日付で動作する方法を紹介します。

数値

JavaScriptでは、すべてがdouble-precision 64-bit binary format IEEE 754(すなわち、-(253 -1) と 253 -1の間の数値)の中にあります。整数の特定のタイプはありません。浮動小数点数を表すことができることに加えて、数値の型は3つの記号値を持っています: +Infinity-InfinityNaN (not-a-number)。また、JavaScriptでの他のプリミティブ型とのコンテキストについて、JavaScript data types and structuresもご覧ください。

4種類の数リテラルを使用することができます。:10進数、2進数、8進数、16進数

10進数

1234567890
42

// Caution when using leading zeros:

0888 // 888 parsed as decimal
0777 // parsed as octal in non-strict mode (511 in decimal)

小数点リテラルはゼロ(0)で開始し、別の10進数が続くことに注意してください。しかし、0に続く次の数値が8より小さい場合、その数値は8進数として解析されます。

2進数

2進数構文は先頭にゼロを使用して小文字または大文字のラテン文字"B"が続きます(0b または 0B)。0bの後の数値が0または1ではない場合、次のSyntaxErrorがスローされます。: "Missing binary digits after 0b".

var FLT_SIGNBIT  = 0b10000000000000000000000000000000; // 2147483648
var FLT_EXPONENT = 0b01111111100000000000000000000000; // 2139095040
var FLT_MANTISSA = 0B00000000011111111111111111111111; // 8388607

8進数

8進数構文は先頭にゼロを使用します。0の後の数値が0から7の範囲外の場合、数値は10進数として解釈されます。

var n = 0755; // 493
var m = 0644; // 420

16進数

16進数構文は先頭にゼロを使用して小文字または大文字のラテン文字"X"が続きます(0x または 0X)。0xの後の数値が範囲(0123456789ABCDEF)外の場合、次のSyntaxErrorがスローされます。: "Identifier starts immediately after numeric literal".

0xFFFFFFFFFFFFFFFFF // 295147905179352830000
0x123456789ABCDEF   // 81985529216486900
0XA                 // 10

Number オブジェクト

ビルトインNumberオブジェクトは最大値、NaN、無限大のような数値定数の特性を有しています。これらのプロパティの値を変更できません。そして、下記のように使用してください。:

var biggestNum = Number.MAX_VALUE;
var smallestNum = Number.MIN_VALUE;
var infiniteNum = Number.POSITIVE_INFINITY;
var negInfiniteNum = Number.NEGATIVE_INFINITY;
var notANum = Number.NaN;

常に自ら生成するNumberオブジェクトのプロパティとしてではなく、上記のように定義済みNumberオブジェクトのプロパティを参照してください。

次の表は、Numberオブジェクトのプロパティをまとめています。

Numberのプロパティ
プロパティ 説明
Number.MAX_VALUE 数値を表す最大値
Number.MIN_VALUE 数値を表す最小値
Number.NaN 特別な "not a number" 値
Number.NEGATIVE_INFINITY 特別な負の無限大の値; オーバーフローを返します。
Number.POSITIVE_INFINITY 特別な正の無限大の値; オーバーフローを返します。
Number.EPSILON Difference between one and the smallest value greater than one that can be represented as a Number.
Number.MIN_SAFE_INTEGER JavaScriptでの最小安全整数値
Number.MAX_SAFE_INTEGER JavaScriptでの最大安全整数値
Numberのメソッド
メソッド 説明
Number.parseFloat() 文字列引数を解析し浮動小数点数を返します。
parseFloat()グローバル関数と同等。
Number.parseInt() 文字列引数を解析し指定された基数またはベースの整数を返します。
parseInt()グローバル関数と同等。
Number.isFinite() 渡された値が有限数であるか否かを判断します。
Number.isInteger() 渡された値が整数であるか否かを判断します。
Number.isNaN() 渡された値がNaNであるか否かを判断します。元のisNaN()グローバル関数より堅牢なバージョン。
Number.isSafeInteger() 渡された値がsafe integerな数値であるか否かを判断します。

Number プロトタイプは様々なフォーマットでNumberオブジェクトから情報を取得するためのメソッドを提供します。次の表は、Number.prototypeのメソッドの概要を示します。

Methods of Number.prototype
メソッド 説明
toExponential() 指数表記の数値を表す文字列を返します。
toFixed() 固定小数点表記の数値を表す文字列を返します。
toPrecision() 固定小数点表記で指定した精度の数を表す文字列を返します。

Math オブジェクト

ビルトインMathオブジェクトは数学定数および関数に対してのプロパティとメソッドを有しています。例えば、Mathオブジェクトの PIプロパティはpi (3.141...)の値を持ちます。それは、アプリケーション内で使用できます。

Math.PI

同様に、標準数学関数がMathのメソッドにあります。これらには、三角関数、対数、指数、およびその他の機能が含まれています。例えば、三角関数sinを使用したい場合、下記のように記述します。

Math.sin(1.56)

Mathのすべての三角関数メソッドはラジアンで引数を取ることに注意してください。

次の表はMathオブジェクトのメソッドをまとめたものです。

Mathのメソッド
メソッド 説明
abs() 絶対値
sin(), cos(), tan() 標準三角関数; 引数はラジアン。
asin(), acos(), atan(), atan2() 逆三角関数; 戻り値はラジアン。
sinh(), cosh(), tanh() 双曲線三角関数; 戻り値はラジアン。
asinh(), acosh(), atanh() 逆双曲線三角関数; 戻り値はラジアン。

pow(), exp()expm1(), log10(), log1p(), log2()

指数と対数関数。
floor(), ceil() 引数より小さい/より大きい、または、等しい最大整数値/最小整数値を返します。
min(), max() カンマで分けられた数値引数のリストの最小値または最大値(それぞれ)を返します。
random() 0と1の間のランダム数値を返します。
round(), fround(), trunc(), 丸めと切り捨て機能。
sqrt(), cbrt(), hypot() 平方根、立方根、引数の二乗の和の平方根。
sign() 数が、正、負またはゼロであるかを示す数の符号
clz32(),
imul()
32ビットのバイナリ表現でゼロビットをリードする数。
二つの引数のCのような32ビットの乗算の結果。

他の多くのオブジェクトとは異なり、決して独自のMathオブジェクトを生成しないでください。常にビルトインMathオブジェクトを使用してください。

Date オブジェクト

JavaScriptはdateデータ型を持ちません。しかしながら、アプリケーション内で日時を用いて動作するためにDateオブジェクトとそのメソッドを使用できます。Dateオブジェクトは、設定、取得、日付の操作に対して多数のメソッドを有しています。何もプロパティを持ちません。

JavaScriptはJavaに似て日付を扱います。二つの言語は同じ日付のメソッドを多く持ち、両方の言語では、January 1, 1970, 00:00:00からのミリ秒の数値として日付を格納します。

Dateオブジェクトの範囲は01 January, 1970 UTCの相対で-100,000,000日から100,000,000 日までです。

Dateオブジェクトの生成:

var dateObjectName = new Date([parameters]);

上記のdateObjectNameは生成されたDateオブジェクトの名称です。; 新しいオブジェクトまたは既存のオブジェクトのプロパティです。

newキーワードなしでDateを呼び出すと、単に与えられた日付を文字列表現に変換します。

上記構文のparametersは次のいづれかになります。:

  • Nothing: 今日の日時を生成します。例えば、today = new Date();です。
  • 次の形式の日付を表す文字列: "Month day, year hours:minutes:seconds." 例えば、var Xmas95 = new Date("December 25, 1995 13:30:00") 時、分、秒を省略した場合、その値はゼロに設定されます。
  • 年、月、日に対する整数の集合。例えば、var Xmas95 = new Date(1995, 11, 25)
  • 年、月、日、時、分、秒に対する整数の集合。例えば、var Xmas95 = new Date(1995, 11, 25, 9, 30, 0);

Date オブジェクトのメソッド

日時を扱うDateオブジェクトのメソッドは下記のカテゴリに分類されます。:

  • "set" メソッド, Dateオブジェクト内の日時の値を設定するため
  • "get" メソッド, Dateオブジェクトから日時を取得するため
  • "to" メソッド,Dateオブジェクトから文字列値を返すため
  • parse と UTC メソッド, Date文字列を解析するため

"get" と "set" メソッドを用いて、秒、分、時、日、曜日、月、年を分割して取得、設定できます。曜日を返すgetDay メソッドはありますが、対応するsetDay メソッドはありません。というのも、曜日は自動的に設定されるからです。これらのメソッドは下記のようにこれらの値を表す整数値を使用します。:

  • 秒と分: 0 〜 59
  • 時: 0 〜 23
  • 曜日: 0 (日曜日) 〜 6 (土曜日)
  • 日: 1 〜 31 (日にち)
  • 月: 0 (1月) 〜 11 (12月)
  • 年: 1900年からの年

例えば、次の日付を定義すると仮定します。:

var Xmas95 = new Date("December 25, 1995");

それから Xmas95.getMonth()は11を返し、Xmas95.getFullYear()は1995を返します。

getTimesetTime メソッドは日付を比較する のに有用です。getTime メソッドはDateオブジェクトに対してJanuary 1, 1970, 00:00:00 からのミリ秒の数値を返します。

例えば、次のコードでは今年に残された日数を表示します。:

var today = new Date();
var endYear = new Date(1995, 11, 31, 23, 59, 59, 999); // Set day and month
endYear.setFullYear(today.getFullYear()); // Set year to this year
var msPerDay = 24 * 60 * 60 * 1000; // Number of milliseconds per day
var daysLeft = (endYear.getTime() - today.getTime()) / msPerDay;
var daysLeft = Math.round(daysLeft); //returns days left in the year

この例では、今日の日時を含むtodayと名付けられたDate オブジェクトを生成します。それから、endYearと名付けられたDateオブジェクトを生成し、年を今年に設定します。そして、ミリ秒値を使用して、todayendYear間の日数を計算します。getTimeを使用し、日にちに丸めます。

parse メソッドは日付文字列から既存のDateオブジェクトに割り当てるのに有用です。例えば、次のコードはparsesetTimeを使用し、日付の値をIPOdateオブジェクトに割り当てます。:

var IPOdate = new Date();
IPOdate.setTime(Date.parse("Aug 9, 1995"));

次の例では、JSClock()関数はデジタル時計の形式で時刻を返します。

function JSClock() {
  var time = new Date();
  var hour = time.getHours();
  var minute = time.getMinutes();
  var second = time.getSeconds();
  var temp = "" + ((hour > 12) ? hour - 12 : hour);
  if (hour == 0)
    temp = "12";
  temp += ((minute < 10) ? ":0" : ":") + minute;
  temp += ((second < 10) ? ":0" : ":") + second;
  temp += (hour >= 12) ? " P.M." : " A.M.";
  return temp;
}

JSClock 関数は最初にtimeと呼ばれる新しいDateオブジェクトを生成します。; 引数が与えられないので、現在の日時でtimeは生成されます。それからgetHoursgetMinutesgetSecondsメソッドを呼ぶと、現在の時、分、秒の値をhourminutesecondに割り当てます。

次の4つのステートメントでは、timeに基づいて文字列値を組み立てます。一つ目のステートメントでは、変数tempを生成し、条件式を使用して値を代入します。; hourが12以上の場合、(hour - 12), さもなければ、単にhour、hourが0の場合、12になります。

次のステートメントでは、minute 値をtempに追加します。minuteの値が10未満の場合、条件式は前にゼロを追加します。さもなければ、境界を画定するコロンを追加します。それから、次のステートメントでは同様に秒の値をtempに追加します。

最後に、hourが12以上の場合は、条件式は、tempに"P.M."を追加し、さもなければ、tempに"A.M."を追加します。

ドキュメントのタグと貢献者

タグ: 
Contributors to this page: shide55
最終更新者: shide55,
サイドバーを隠す