← ECMAScript 2027 · İçindekiler
ECMA-262 · 18inci Baskı
21

Sayılar ve Tarihler (Numbers and Dates)

21.1 Sayı (Number) Nesneleri (Number Objects)

21.1.1 Number Yapıcısı (The Number Constructor)

Number yapıcısı (constructor):

  • %Number% nesnesidir.

  • global nesnenin (global object) "Number" özelliğinin başlangıç değeridir.

  • bir yapıcı (constructor) olarak çağrıldığında yeni bir Number nesnesi oluşturur ve başlatır.

  • bir yapıcı (constructor) yerine bir işlev olarak çağrıldığında tür dönüştürme gerçekleştirir.

  • bir sınıf tanımının extends tümcesinin değeri olarak kullanılabilir. Belirtilen Number davranışını miras almayı amaçlayan alt sınıf yapıcıları (constructors), alt sınıf örneğini bir [[NumberData]] dahili yuvası (internal slot) ile oluşturmak ve başlatmak için Number yapıcısına (constructor) yapılacak bir super çağrısı içermelidir.

21.1.1.1 Number ( value )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer value mevcutsa, o halde

    1. primitive, ? ToNumeric(value) olsun.

    2. Eğer primitive bir BigInt ise (is a BigInt), n, 𝔽((primitive)) olsun.

    3. Değilse, n, primitive olsun.

  2. Değilse,

    1. n, +0𝔽 olsun.
  3. Eğer NewTarget undefined ise, n döndür.

  4. obj, ? OrdinaryCreateFromConstructor(NewTarget, "%Number.prototype%", « [[NumberData]] ») olsun.

  5. obj.[[NumberData]] değerini n olarak ayarla.

  6. obj döndür.

21.1.2 Number Yapıcısının Özellikleri (Properties of the Number Constructor)

Number yapıcısı (constructor):

  • değeri %Function.prototype% olan bir [[Prototype]] dahili yuvasına (internal slot) sahiptir.

  • aşağıdaki özelliklere sahiptir:

21.1.2.1 Number.EPSILON

Number.EPSILON özelliğinin değeri, 1 ile 1'den büyük olan ve bir Sayı (Number) değeri olarak temsil edilebilen en küçük değer arasındaki farkın büyüklüğü için Sayı değeridir (Number value for). Bu değer yaklaşık olarak 2,2204460492503130808472633361816 × 10-16'dır.

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

21.1.2.2 Number.isFinite ( number )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer number bir Sayı değilse (is not a Number), false döndür.

  2. Eğer number sonlu (finite) değilse, false döndür.

  3. true döndür.

21.1.2.3 Number.isInteger ( number )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer number bir tam sayı Sayı (integral Number) ise, true döndür.

  2. false döndür.

21.1.2.4 Number.isNaN ( number )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer number bir Sayı değilse (is not a Number), false döndür.

  2. Eğer number NaN ise, true döndür.

  3. false döndür.

21.1.2.5 Number.isSafeInteger ( number )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer number bir tam sayı Sayı (integral Number) ise, o halde

    1. Eğer abs((number)) ≤ 253 - 1 ise, true döndür.
  2. false döndür.

21.1.2.6 Number.MAX_SAFE_INTEGER

Number.MAX_SAFE_INTEGER özelliğinin değeri 9007199254740991𝔽 (𝔽(253 - 1)) nesnesidir.

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

21.1.2.7 Number.MAX_VALUE

Number.MAX_VALUE özelliğinin değeri, Sayı türünün (Number type) en büyük pozitif sonlu (finite) değeridir. Bu değer yaklaşık olarak 1,7976931348623157 × 10308'dir.

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

21.1.2.8 Number.MIN_SAFE_INTEGER

Number.MIN_SAFE_INTEGER özelliğinin değeri -9007199254740991𝔽 (𝔽(-(253 - 1))) nesnesidir.

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

21.1.2.9 Number.MIN_VALUE

Number.MIN_VALUE özelliğinin değeri, Sayı türünün (Number type) en küçük pozitif değeridir. Bu değer yaklaşık olarak 5 × 10-324'tür.

IEEE 754-2019 çift duyarlıklı (double precision) ikili temsilinde, mümkün olan en küçük değer normalleştirilmemiş (denormalized) bir sayıdır. Eğer bir uygulama normalleştirilmemiş değerleri desteklemiyorsa, Number.MIN_VALUE değeri, uygulama tarafından fiilen temsil edilebilen en küçük sıfır dışı pozitif değer olmalıdır.

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

21.1.2.10 Number.NaN

Number.NaN özelliğinin değeri NaN'dır.

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

21.1.2.11 Number.NEGATIVE_INFINITY

Number.NEGATIVE_INFINITY özelliğinin değeri -∞𝔽'dir.

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

21.1.2.12 Number.parseFloat ( string )

"parseFloat" özelliğinin başlangıç değeri %parseFloat% nesnesidir.

21.1.2.13 Number.parseInt ( string, radix )

"parseInt" özelliğinin başlangıç değeri %parseInt% nesnesidir.

21.1.2.14 Number.POSITIVE_INFINITY

Number.POSITIVE_INFINITY özelliğinin değeri +∞𝔽'dir.

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

21.1.2.15 Number.prototype

Number.prototype özelliğinin başlangıç değeri Number prototip nesnesidir (Number prototype object).

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

21.1.3 Number Prototip Nesnesinin Özellikleri (Properties of the Number Prototype Object)

Number prototip nesnesi:

  • %Number.prototype% nesnesidir.

  • bir sıradan nesnedir (ordinary object).

  • kendisi de bir Number nesnesi; değeri +0𝔽 olan bir [[NumberData]] dahili yuvasına (internal slot) sahiptir.

  • değeri %Object.prototype% olan bir [[Prototype]] dahili yuvasına (internal slot) sahiptir.

Açıkça aksi belirtilmedikçe, aşağıda tanımlanan Number prototip nesnesi yöntemleri genel (generic) değildir ve bunlara geçirilen this değeri, ya bir Sayı (Number) değeri ya da bir Sayı değerine başlatılmış bir [[NumberData]] dahili yuvasına sahip bir nesne olmalıdır.

Bir yöntemin belirtimi içindeki "bu Sayı değeri" (this Number value) ifadesi, yöntem çağrısının this değeri argüman olarak geçirilerek ThisNumberValue soyut işleminin çağrılmasıyla döndürülen sonucu ifade eder.

21.1.3.1 Number.prototype.constructor

Number.prototype.constructor özelliğinin başlangıç değeri %Number% nesnesidir.

21.1.3.2 Number.prototype.toExponential ( fractionDigits )

Bu yöntem, bu Sayı değerini, anlamlı kısmın (significand) ondalık noktasından önce bir basamak ve anlamlı kısmın ondalık noktasından sonra fractionDigits basamak olacak şekilde ondalık üstel gösterimle temsil eden bir Dize döndürür. Eğer fractionDigits undefined ise, Sayıyı benzersiz bir şekilde tanımlamak için gereken sayıda anlamlı kısım basamağını içerir (tıpkı ToString içinde olduğu gibi, tek fark bu durumda Sayının her zaman üstel gösterimle çıktı vermesidir).

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. number, ? ThisNumberValue(this değeri) olsun.

  2. fractionCount, ? ToIntegerOrInfinity(fractionDigits) olsun.

  3. Assert: Eğer fractionDigits undefined ise, o halde fractionCount 0'dır.

  4. Eğer number sonlu (finite) değilse, Number::toString(number, 10) döndür.

  5. Eğer fractionCount < 0 veya fractionCount > 100 ise, bir RangeError istisnası fırlat.

  6. number değerini (number) olarak ayarla.

  7. sign boş Dize olsun.

  8. Eğer number < 0 ise, o halde

    1. sign değerini "-" olarak ayarla.

    2. number değerini -number olarak ayarla.

  9. Eğer number = 0 ise, o halde

    1. significand, 0x0030 (DIGIT ZERO) kod biriminin fractionCount + 1 kez tekrarlanmasından oluşan Dize değeri olsun.

    2. exponent 0 olsun.

  10. Değilse,

    1. Eğer fractionDigits undefined değilse, o halde

      1. exponent ve intSignificand, 10fractionCountintSignificand < 10fractionCount + 1 olacak şekilde ve intSignificand × 10exponent - fractionCount - number ifadesi sıfıra mümkün olduğunca yakın olacak şekilde tam sayılar (integers) olsun. Eğer bu tür iki exponent ve intSignificand kümesi varsa, intSignificand × 10exponent - fractionCount değerinin daha büyük olduğu exponent ve intSignificand'ı seç.
    2. Değilse,

      1. exponent, intSignificand ve ff, ff ≥ 0, 10ffintSignificand < 10ff + 1 olacak şekilde, 𝔽(intSignificand × 10exponent - ff) değeri 𝔽(number) olacak şekilde ve ff mümkün olduğunca küçük olacak şekilde tam sayılar (integers) olsun. intSignificand'ın ondalık temsilinin ff + 1 basamağa sahip olduğunu, intSignificand'ın 10 ile bölünemediğini ve intSignificand'ın en küçük basamağının bu kriterlere göre mutlaka benzersiz şekilde belirlenmesi gerekmediğini unutmayın.

      2. fractionCount değerini ff olarak ayarla.

    3. significand, intSignificand'ın ondalık temsilinin basamaklarından (sırasıyla, başında sıfır olmadan) oluşan Dize değeri olsun.

  11. Eğer fractionCount ≠ 0 ise, o halde

    1. intPart, significand'ın ilk kod birimi (code unit) olsun.

    2. fractionalPart, significand'ın diğer fractionCount kod birimi olsun.

    3. significand değerini intPart, "." ve fractionalPart değerlerinin dize birleşimi (string-concatenation) olarak ayarla.

  12. Eğer exponent = 0 ise, o halde

    1. exponentSign "+" olsun.

    2. exponentDigits "0" olsun.

  13. Değilse,

    1. Eğer exponent > 0 ise, o halde

      1. exponentSign "+" olsun.
    2. Değilse,

      1. Assert: exponent < 0.

      2. exponentSign "-" olsun.

      3. exponent değerini -exponent olarak ayarla.

    3. exponentDigits, exponent'in ondalık temsilinin basamaklarından (sırasıyla, başında sıfır olmadan) oluşan Dize değeri olsun.

  14. significand değerini significand, "e", exponentSign ve exponentDigits değerlerinin dize birleşimi (string-concatenation) olarak ayarla.

  15. sign ve significand değerlerinin dize birleşimini (string-concatenation) döndür.

21.1.3.3 Number.prototype.toFixed ( fractionDigits )

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. number, ? ThisNumberValue(this değeri) olsun.

  2. fractionCount, ? ToIntegerOrInfinity(fractionDigits) olsun.

  3. Assert: Eğer fractionDigits undefined ise, o halde fractionCount 0'dır.

  4. Eğer fractionCount sonlu (finite) değilse, bir RangeError istisnası fırlat.

  5. Eğer fractionCount < 0 veya fractionCount > 100 ise, bir RangeError istisnası fırlat.

  6. Eğer number sonlu (finite) değilse, Number::toString(number, 10) döndür.

  7. number değerini (number) olarak ayarla.

  8. sign boş Dize olsun.

  9. Eğer number < 0 ise, o halde

    1. sign değerini "-" olarak ayarla.

    2. number değerini -number olarak ayarla.

  10. Eğer number ≥ 1021 ise, o halde

    1. digitString, ! ToString(𝔽(number)) olsun.
  11. Değilse,

    1. intValue, intValue / 10fractionCount - number ifadesi sıfıra mümkün olduğunca yakın olacak şekilde bir tam sayı (integer) olsun. Eğer bu tür iki intValue varsa, daha büyük olan intValue'u seç.

    2. Eğer intValue = 0 ise, digitString "0" olsun; değilse digitString, intValue'un ondalık temsilinin basamaklarından (sırasıyla, başında sıfır olmadan) oluşan Dize değeri olsun.

    3. Eğer fractionCount ≠ 0 ise, o halde

      1. digitCount, digitString'in uzunluğu olsun.

      2. Eğer digitCountfractionCount ise, o halde

         1. *zeroPad*, 0x0030 (DIGIT ZERO) kod biriminin *fractionCount* + 1 - *digitCount* kez tekrarlanmasından oluşan Dize değeri olsun.
        
         2. *digitString* değerini *zeroPad* ve *digitString* değerlerinin [dize birleşimi (string-concatenation)](07_sec-ecmascript-data-types-and-values.md#string-concatenation) olarak ayarla.
        
         3. *digitCount* değerini *fractionCount* + 1 olarak ayarla.
      3. intPart, digitString'in ilk digitCount - fractionCount kod birimi olsun.

      4. fractionalPart, digitString'in diğer fractionCount kod birimi olsun.

      5. digitString değerini intPart, "." ve fractionalPart değerlerinin dize birleşimi (string-concatenation) olarak ayarla.

  12. sign ve digitString değerlerinin dize birleşimini (string-concatenation) döndür.

21.1.3.4 Number.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )

ECMA-402 Uluslararasılaştırma API'sini (Internationalization API) içeren bir ECMAScript uygulaması, bu yöntemi ECMA-402 belirtiminde açıklandığı şekilde uygulamalıdır. Eğer bir ECMAScript uygulaması ECMA-402 API'sini içermiyorsa, bu yöntemin aşağıdaki belirtimi kullanılır:

Bu yöntem, bu Sayı değerini barındırıcı ortamın (host environment) geçerli yerel ayarlarının kurallarına göre biçimlendirilmiş olarak temsil eden bir Dize değeri üretir. Bu yöntem uygulamaya göre tanımlıdır (implementation-defined) ve toString ile aynı sonucu döndürmesine izin verilir ancak bu önerilmez.

Bu yönteme yönelik isteğe bağlı parametrelerin anlamları ECMA-402 belirtiminde tanımlanmıştır; ECMA-402 desteği içermeyen uygulamalar, bu parametre konumlarını başka hiçbir amaçla kullanmamalıdır.

21.1.3.5 Number.prototype.toPrecision ( precision )

Bu yöntem, bu Sayı değerini, ya anlamlı kısmın ondalık noktasından önce bir basamak ve anlamlı kısmın ondalık noktasından sonra precision - 1 basamak olacak şekilde ondalık üstel gösterimle ya da precision anlamlı basamağa sahip olacak şekilde ondalık sabit gösterimle temsil eden bir Dize döndürür. Eğer precision undefined ise, bunun yerine ToString işlemini çağırır.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. number, ? ThisNumberValue(this değeri) olsun.

  2. Eğer precision undefined ise, ! ToString(number) döndür.

  3. precisionCount, ? ToIntegerOrInfinity(precision) olsun.

  4. Eğer number sonlu (finite) değilse, Number::toString(number, 10) döndür.

  5. Eğer precisionCount < 1 veya precisionCount > 100 ise, bir RangeError istisnası fırlat.

  6. number değerini (number) olarak ayarla.

  7. sign boş Dize olsun.

  8. Eğer number < 0 ise, o halde

    1. sign değerini 0x002D (HYPHEN-MINUS) kod birimi olarak ayarla.

    2. number değerini -number olarak ayarla.

  9. Eğer number = 0 ise, o halde

    1. significand, 0x0030 (DIGIT ZERO) kod biriminin precisionCount kez tekrarlanmasından oluşan Dize değeri olsun.

    2. exponent 0 olsun.

  10. Değilse,

    1. exponent ve intSignificand, 10precisionCount - 1intSignificand < 10precisionCount olacak şekilde ve intSignificand × 10exponent - precisionCount + 1 - number ifadesi sıfıra mümkün olduğunca yakın olacak şekilde tam sayılar (integers) olsun. Eğer bu tür iki exponent ve intSignificand kümesi varsa, intSignificand × 10exponent - precisionCount + 1 değerinin daha büyük olduğu exponent ve intSignificand'ı seç.

    2. significand, intSignificand'ın ondalık temsilinin basamaklarından (sırasıyla, başında sıfır olmadan) oluşan Dize değeri olsun.

    3. Eğer exponent < -6 veya exponentprecisionCount ise, o halde

      1. Assert: exponent ≠ 0.

      2. Eğer precisionCount ≠ 1 ise, o halde

         1. *intPart*, *significand*'ın ilk kod birimi olsun.
        
         2. *fractionalPart*, *significand*'ın diğer *precisionCount* - 1 kod birimi olsun.
        
         3. *significand* değerini *intPart*, `"."` ve *fractionalPart* değerlerinin [dize birleşimi (string-concatenation)](07_sec-ecmascript-data-types-and-values.md#string-concatenation) olarak ayarla.
      3. Eğer exponent > 0 ise, o halde

         1. *exponentSign* 0x002B (PLUS SIGN) kod birimi olsun.
      4. Değilse,

         1. [Assert](06_sec-notational-conventions.md#assert): *exponent* < 0.
        
         2. *exponentSign* 0x002D (HYPHEN-MINUS) kod birimi olsun.
        
         3. *exponent* değerini -*exponent* olarak ayarla.
      5. exponentDigits, exponent'in ondalık temsilinin basamaklarından (sırasıyla, başında sıfır olmadan) oluşan Dize değeri olsun.

      6. sign, significand, 0x0065 (LATIN SMALL LETTER E) kod birimi, exponentSign ve exponentDigits değerlerinin dize birleşimini (string-concatenation) döndür.

  11. Eğer exponent = precisionCount - 1 ise, sign ve significand değerlerinin dize birleşimini (string-concatenation) döndür.

  12. Eğer exponent ≥ 0 ise, o halde

    1. significand değerini significand'ın ilk exponent + 1 kod birimi, 0x002E (FULL STOP) kod birimi ve significand'ın kalan precisionCount - (exponent + 1) kod biriminin dize birleşimi (string-concatenation) olarak ayarla.
  13. Değilse,

    1. significand değerini 0x0030 (DIGIT ZERO) kod birimi, 0x002E (FULL STOP) kod birimi, 0x0030 (DIGIT ZERO) kod biriminin -(exponent + 1) kez tekrarlanması ve significand Dizesinin dize birleşimi (string-concatenation) olarak ayarla.
  14. sign ve significand değerlerinin dize birleşimini (string-concatenation) döndür.

21.1.3.6 Number.prototype.toString ( [ radix ] )

Bu yöntem, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. x, ? ThisNumberValue(this değeri) olsun.

  2. Eğer radix undefined ise, radixMV 10 olsun.

  3. Değilse, radixMV, ? ToIntegerOrInfinity(radix) olsun.

  4. Eğer radixMV 2 ile 36 arasındaki kapalı aralıkta (inclusive interval) değilse, bir RangeError istisnası fırlat.

  5. Number::toString(x, radixMV) döndür.

Bu yöntem genel (generic) değildir; this değeri bir Sayı değilse (is not a Number) ya da bir Number nesnesi değilse bir TypeError istisnası fırlatır. Bu nedenle, bir yöntem olarak kullanılmak üzere diğer nesne türlerine aktarılamaz.

Bu yöntemin "length" özelliğinin değeri 1𝔽'dir.

21.1.3.7 Number.prototype.valueOf ( )

  1. ? ThisNumberValue(this değeri) döndür.
21.1.3.7.1 ThisNumberValue ( arg )

Soyut işlem ThisNumberValue; arg (bir ECMAScript dil değeri (ECMAScript language value)) argümanını alır ve bir Sayı içeren bir normal tamamlanma (normal completion) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer arg bir Sayı ise (is a Number), arg döndür.

  2. Eğer arg bir Nesne ise (is an Object) ve arg bir [[NumberData]] dahili yuvasına (internal slot) sahipse, o halde

    1. number, arg.[[NumberData]] olsun.

    2. Assert: number bir Sayıdır (is a Number).

    3. number döndür.

  3. Bir TypeError istisnası fırlat.

21.1.4 Number Örneklerinin Özellikleri (Properties of Number Instances)

Number örnekleri, Number prototip nesnesinden (Number prototype object) özellikler miras alan sıradan nesnelerdir (ordinary objects). Number örnekleri ayrıca bir [[NumberData]] dahili yuvasına (internal slot) sahiptir. [[NumberData]] dahili yuvası, bu Number nesnesi tarafından temsil edilen Number değeridir.

21.2 BigInt Nesneleri (BigInt Objects)

21.2.1 BigInt Yapıcısı (The BigInt Constructor)

BigInt yapıcısı (constructor):

  • %BigInt% nesnesidir.

  • global nesnenin (global object) "BigInt" özelliğinin başlangıç değeridir.

  • bir yapıcı (constructor) yerine bir işlev olarak çağrıldığında tür dönüştürme gerçekleştirir.

  • new işleciyle kullanılmak veya alt sınıflandırılmak üzere tasarlanmamıştır. Bir sınıf tanımının extends tümcesinin değeri olarak kullanılabilir, ancak BigInt yapıcısına (constructor) yapılacak bir super çağrısı bir istisnaya neden olur.

21.2.1.1 BigInt ( value )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer NewTarget undefined değilse, bir TypeError istisnası fırlat.

  2. primitive, ? ToPrimitive(value, number) olsun.

  3. Eğer primitive bir Sayı ise (is a Number), ? NumberToBigInt(primitive) döndür.

  4. ? ToBigInt(primitive) döndür.

21.2.1.1.1 NumberToBigInt ( number )

Soyut işlem NumberToBigInt; number (bir Sayı) argümanını alır ve bir BigInt içeren bir normal tamamlanma (normal completion) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer number bir tam sayı Sayı (integral Number) değilse, bir RangeError istisnası fırlat.

  2. ((number)) döndür.

21.2.2 BigInt Yapıcısının Özellikleri (Properties of the BigInt Constructor)

BigInt yapıcısı (constructor):

  • değeri %Function.prototype% olan bir [[Prototype]] dahili yuvasına (internal slot) sahiptir.

  • aşağıdaki özelliklere sahiptir:

21.2.2.1 BigInt.asIntN ( bits, bigint )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. bits değerini ? ToIndex(bits) olarak ayarla.

  2. bigint değerini ? ToBigInt(bigint) olarak ayarla.

  3. module, (bigint) modulo 2bits olsun.

  4. Eğer module ≥ 2bits - 1 ise, (module - 2bits) döndür.

  5. (module) döndür.

21.2.2.2 BigInt.asUintN ( bits, bigint )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. bits değerini ? ToIndex(bits) olarak ayarla.

  2. bigint değerini ? ToBigInt(bigint) olarak ayarla.

  3. ((bigint) modulo 2bits) döndür.

21.2.2.3 BigInt.prototype

BigInt.prototype özelliğinin başlangıç değeri BigInt prototip nesnesidir (BigInt prototype object).

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

21.2.3 BigInt Prototip Nesnesinin Özellikleri (Properties of the BigInt Prototype Object)

BigInt prototip nesnesi:

Bir yöntemin belirtimi içindeki "bu BigInt değeri" (this BigInt value) ifadesi, yöntem çağrısının this değeri argüman olarak geçirilerek ThisBigIntValue soyut işleminin çağrılmasıyla döndürülen sonucu ifade eder.

21.2.3.1 BigInt.prototype.constructor

BigInt.prototype.constructor özelliğinin başlangıç değeri %BigInt% nesnesidir.

21.2.3.2 BigInt.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )

ECMA-402 Uluslararasılaştırma API'sini içeren bir ECMAScript uygulaması, bu yöntemi ECMA-402 belirtiminde açıklandığı şekilde uygulamalıdır. Eğer bir ECMAScript uygulaması ECMA-402 API'sini içermiyorsa, bu yöntemin aşağıdaki belirtimi kullanılır:

Bu yöntem, bu BigInt değerini barındırıcı ortamın (host environment) geçerli yerel ayarlarının kurallarına göre biçimlendirilmiş olarak temsil eden bir Dize değeri üretir. Bu yöntem uygulamaya göre tanımlıdır (implementation-defined), ve toString ile aynı sonucu döndürmesine izin verilir ancak bu önerilmez.

Bu yönteme yönelik isteğe bağlı parametrelerin anlamları ECMA-402 belirtiminde tanımlanmıştır; ECMA-402 desteği içermeyen uygulamalar, bu parametre konumlarını başka hiçbir amaçla kullanmamalıdır.

21.2.3.3 BigInt.prototype.toString ( [ radix ] )

Bu yöntem, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. x, ? ThisBigIntValue(this değeri) olsun.

  2. Eğer radix undefined ise, radixMV 10 olsun.

  3. Değilse, radixMV, ? ToIntegerOrInfinity(radix) olsun.

  4. Eğer radixMV 2 ile 36 arasındaki kapalı aralıkta (inclusive interval) değilse, bir RangeError istisnası fırlat.

  5. BigInt::toString(x, radixMV) döndür.

Bu yöntem genel (generic) değildir; this değeri bir BigInt değilse (is not a BigInt) veya bir BigInt nesnesi değilse bir TypeError istisnası fırlatır. Bu nedenle, bir yöntem olarak kullanılmak üzere diğer nesne türlerine aktarılamaz.

21.2.3.4 BigInt.prototype.valueOf ( )

  1. ? ThisBigIntValue(this değeri) döndür.
21.2.3.4.1 ThisBigIntValue ( arg )

Soyut işlem ThisBigIntValue; arg (bir ECMAScript dil değeri (ECMAScript language value)) argümanını alır ve bir BigInt içeren bir normal tamamlanma (normal completion) ya da bir fırlatma tamamlanması (throw completion) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer arg bir BigInt ise (is a BigInt), arg döndür.

  2. Eğer arg bir Nesne ise (is an Object) ve arg bir [[BigIntData]] dahili yuvasına (internal slot) sahipse, o halde

    1. Assert: arg.[[BigIntData]] bir BigInt'tir (is a BigInt).

    2. arg.[[BigIntData]] döndür.

  3. Bir TypeError istisnası fırlat.

21.2.3.5 BigInt.prototype [ %Symbol.toStringTag% ]

%Symbol.toStringTag% özelliğinin başlangıç değeri "BigInt" Dize değeridir.

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } özniteliklerine sahiptir.

21.2.4 BigInt Örneklerinin Özellikleri (Properties of BigInt Instances)

BigInt örnekleri, BigInt prototip nesnesinden (BigInt prototype object) özellikler miras alan sıradan nesnelerdir (ordinary objects). BigInt örnekleri ayrıca bir [[BigIntData]] dahili yuvasına (internal slot) sahiptir. [[BigIntData]] dahili yuvası, bu BigInt nesnesi tarafından temsil edilen BigInt değeridir.

21.3 Math Nesnesi (The Math Object)

Math nesnesi:

21.3.1 Math Nesnesinin Değer Özellikleri (Value Properties of the Math Object)

21.3.1.1 Math.E

Doğal logaritmanın tabanı olan e için Sayı değeridir (Number value for). Bu değer yaklaşık olarak 2,7182818284590452354'tür.

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

21.3.1.2 Math.LN10

10'un doğal logaritması için Sayı değeridir (Number value for). Bu değer yaklaşık olarak 2,302585092994046'dır.

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

21.3.1.3 Math.LN2

2'nin doğal logaritması için Sayı değeridir (Number value for). Bu değer yaklaşık olarak 0,6931471805599453'tür.

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

21.3.1.4 Math.LOG10E

Doğal logaritmanın tabanı olan e'nin 10 tabanına göre logaritması için Sayı değeridir (Number value for). Bu değer yaklaşık olarak 0,4342944819032518'dir.

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

21.3.1.5 Math.LOG2E

Doğal logaritmanın tabanı olan e'nin 2 tabanına göre logaritması için Sayı değeridir (Number value for). Bu değer yaklaşık olarak 1,4426950408889634'tür.

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

21.3.1.6 Math.PI

Dairenin çevresinin çapına oranı olan π için Sayı değeridir (Number value for). Bu değer yaklaşık olarak 3,1415926535897932'dir.

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

21.3.1.7 Math.SQRT1_2

½'nin karekökü için Sayı değeridir (Number value for). Bu değer yaklaşık olarak 0,7071067811865476'dır.

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

21.3.1.8 Math.SQRT2

2'nin karekökü için Sayı değeridir (Number value for). Bu değer yaklaşık olarak 1,4142135623730951'dir.

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

21.3.1.9 Math [ %Symbol.toStringTag% ]

%Symbol.toStringTag% özelliğinin başlangıç değeri "Math" Dize değeridir.

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } özniteliklerine sahiptir.

21.3.2 Math Nesnesinin İşlev Özellikleri (Function Properties of the Math Object)

21.3.2.1 Math.abs ( x )

Bu işlev, x'in mutlak değerini döndürür; sonuç x ile aynı büyüklüğe sahiptir ancak işareti pozitiftir.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, ? ToNumber(x) olsun.

  2. Eğer n NaN ise, NaN döndür.

  3. Eğer n -0𝔽 ise, +0𝔽 döndür.

  4. Eğer n -∞𝔽 ise, +∞𝔽 döndür.

  5. Eğer n < -0𝔽 ise, -n döndür.

  6. n döndür.

21.3.2.2 Math.acos ( x )

Bu işlev, x'in ters kosinüsünü (arkkosinüsünü) döndürür. Sonuç radyan cinsinden ifade edilir ve +0𝔽 ile 𝔽(π) arasındaki kapalı aralıktadır (inclusive interval).

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, ? ToNumber(x) olsun.

  2. Eğer n NaN ise, n > 1𝔽 veya n < -1𝔽 ise, NaN döndür.

  3. Eğer n 1𝔽 ise, +0𝔽 döndür.

  4. (n) değerinin ters kosinüsünü temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

21.3.2.3 Math.acosh ( x )

Bu işlev, x'in ters hiperbolik kosinüsünü döndürür.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, ? ToNumber(x) olsun.

  2. Eğer n NaN veya +∞𝔽 ise, n döndür.

  3. Eğer n 1𝔽 ise, +0𝔽 döndür.

  4. Eğer n < 1𝔽 ise, NaN döndür.

  5. (n) değerinin ters hiperbolik kosinüsünü temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

21.3.2.4 Math.asin ( x )

Bu işlev, x'in ters sinüsünü (arksinüsünü) döndürür. Sonuç radyan cinsinden ifade edilir ve 𝔽(-π / 2) ile 𝔽(π / 2) arasındaki kapalı aralıktadır (inclusive interval).

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, ? ToNumber(x) olsun.

  2. Eğer n; NaN, +0𝔽 veya -0𝔽 değerlerinden biri ise, n döndür.

  3. Eğer n > 1𝔽 veya n < -1𝔽 ise, NaN döndür.

  4. (n) değerinin ters sinüsünü temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

21.3.2.5 Math.asinh ( x )

Bu işlev, x'in ters hiperbolik sinüsünü döndürür.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, ? ToNumber(x) olsun.

  2. Eğer n sonlu (finite) değilse veya n; +0𝔽 ya da -0𝔽 ise, n döndür.

  3. (n) değerinin ters hiperbolik sinüsünü temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

21.3.2.6 Math.atan ( x )

Bu işlev, x'in ters tanjantını (arktanjantını) döndürür. Sonuç radyan cinsinden ifade edilir ve 𝔽(-π / 2) ile 𝔽(π / 2) arasındaki kapalı aralıktadır (inclusive interval).

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, ? ToNumber(x) olsun.

  2. Eğer n; NaN, +0𝔽 veya -0𝔽 değerlerinden biri ise, n döndür.

  3. Eğer n +∞𝔽 ise, π / 2 değerini temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

  4. Eğer n -∞𝔽 ise, -π / 2 değerini temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

  5. (n) değerinin ters tanjantını temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

21.3.2.7 Math.atanh ( x )

Bu işlev, x'in ters hiperbolik tanjantını döndürür.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, ? ToNumber(x) olsun.

  2. Eğer n; NaN, +0𝔽 veya -0𝔽 değerlerinden biri ise, n döndür.

  3. Eğer n > 1𝔽 veya n < -1𝔽 ise, NaN döndür.

  4. Eğer n 1𝔽 ise, +∞𝔽 döndür.

  5. Eğer n -1𝔽 ise, -∞𝔽 döndür.

  6. (n) değerinin ters hiperbolik tanjantını temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

21.3.2.8 Math.atan2 ( y, x )

Bu işlev, y ve x argümanlarının y / x bölümünün ters tanjantını döndürür; burada sonucun hangi çeyrekte (quadrant) olduğunu belirlemek için y ve x'in işaretleri kullanılır. İki argümanlı ters tanjant işlevinde, y adlı argümanın birinci, x adlı argümanın ise ikinci sırada olmasının kasıtlı ve geleneksel olduğunu unutmayın. Sonuç radyan cinsinden ifade edilir ve -π ile +π arasındaki kapalı aralıktadır (inclusive interval).

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ny, ? ToNumber(y) olsun.

  2. nx, ? ToNumber(x) olsun.

  3. Eğer ny NaN veya nx NaN ise, NaN döndür.

  4. Eğer ny +∞𝔽 ise, o halde

    1. Eğer nx +∞𝔽 ise, π / 4 değerini temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

    2. Eğer nx -∞𝔽 ise, 3π / 4 değerini temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

    3. π / 2 değerini temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

  5. Eğer ny -∞𝔽 ise, o halde

    1. Eğer nx +∞𝔽 ise, -π / 4 değerini temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

    2. Eğer nx -∞𝔽 ise, -3π / 4 değerini temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

    3. -π / 2 değerini temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

  6. Eğer ny +0𝔽 ise, o halde

    1. Eğer nx > +0𝔽 veya nx +0𝔽 ise, +0𝔽 döndür.

    2. π değerini temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

  7. Eğer ny -0𝔽 ise, o halde

    1. Eğer nx > +0𝔽 veya nx +0𝔽 ise, -0𝔽 döndür.

    2. -π değerini temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

  8. Assert: ny sonludur (finite) ve ne +0𝔽 ne de -0𝔽'dir.

  9. Eğer ny > +0𝔽 ise, o halde

    1. Eğer nx +∞𝔽 ise, +0𝔽 döndür.

    2. Eğer nx -∞𝔽 ise, π değerini temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

    3. Eğer nx; +0𝔽 ya da -0𝔽 ise, π / 2 değerini temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

  10. Eğer ny < -0𝔽 ise, o halde

    1. Eğer nx +∞𝔽 ise, -0𝔽 döndür.

    2. Eğer nx -∞𝔽 ise, -π değerini temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

    3. Eğer nx; +0𝔽 ya da -0𝔽 ise, -π / 2 değerini temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

  11. Assert: nx sonludur (finite) ve ne +0𝔽 ne de -0𝔽'dir.

  12. result, abs((ny) / (nx)) ifadesinin ters tanjantı olsun.

  13. Eğer nx < -0𝔽 ise, o halde

    1. Eğer ny > +0𝔽 ise, result değerini π - result olarak ayarla.

    2. Değilse, result değerini -π + result olarak ayarla.

  14. Değilse,

    1. Eğer ny < -0𝔽 ise, result değerini -result olarak ayarla.
  15. result değerini temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

21.3.2.9 Math.cbrt ( x )

Bu işlev, x'in küp kökünü döndürür.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, ? ToNumber(x) olsun.

  2. Eğer n sonlu (finite) değilse veya n; +0𝔽 ya da -0𝔽 ise, n döndür.

  3. (n) değerinin küp kökünü temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

21.3.2.10 Math.ceil ( x )

Bu işlev, x'ten küçük olmayan en küçük (-∞'a en yakın) tam sayı Sayı (integral Number) değerini döndürür. Eğer x zaten bir tam sayı Sayı (integral Number) ise, sonuç x olur.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, ? ToNumber(x) olsun.

  2. Eğer n sonlu (finite) değilse veya n; +0𝔽 ya da -0𝔽 ise, n döndür.

  3. Eğer n < -0𝔽 ve n > -1𝔽 ise, -0𝔽 döndür.

  4. Eğer n bir tam sayı Sayı (integral Number) ise, n döndür.

  5. n'den küçük olmayan en küçük (-∞'a en yakın) tam sayı Sayı (integral Number) değerini döndür.

21.3.2.11 Math.clz32 ( x )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, ? ToUint32(x) olsun.

  2. p, n'nin işaretsiz 32 bitlik ikili temsilindeki baştaki sıfır bitlerinin sayısı olsun.

  3. 𝔽(p) döndür.

21.3.2.12 Math.cos ( x )

Bu işlev, x'in kosinüsünü döndürür. Argüman radyan cinsinden ifade edilir.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, ? ToNumber(x) olsun.

  2. Eğer n sonlu (finite) değilse, NaN döndür.

  3. Eğer n; +0𝔽 ya da -0𝔽 ise, 1𝔽 döndür.

  4. (n) değerinin kosinüsünü temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

21.3.2.13 Math.cosh ( x )

Bu işlev, x'in hiperbolik kosinüsünü döndürür.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, ? ToNumber(x) olsun.

  2. Eğer n NaN ise, NaN döndür.

  3. Eğer n; +∞𝔽 ya da -∞𝔽 ise, +∞𝔽 döndür.

  4. Eğer n; +0𝔽 ya da -0𝔽 ise, 1𝔽 döndür.

  5. (n) değerinin hiperbolik kosinüsünü temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

21.3.2.14 Math.exp ( x )

Bu işlev, x'in üstel işlevini döndürür (e'nin x. kuvveti, burada e doğal logaritmanın tabanıdır).

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, ? ToNumber(x) olsun.

  2. Eğer n; NaN veya +∞𝔽 ise, n döndür.

  3. Eğer n; +0𝔽 ya da -0𝔽 ise, 1𝔽 döndür.

  4. Eğer n -∞𝔽 ise, +0𝔽 döndür.

  5. (n) değerinin üstel işlevini temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

21.3.2.15 Math.expm1 ( x )

Bu işlev, x'in üstel işlevinden (e'nin x. kuvveti, burada e doğal logaritmanın tabanıdır) 1 çıkarılmasının sonucunu döndürür. Sonuç, x'in değeri 0'a yakın olduğunda bile doğru olacak şekilde hesaplanır.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, ? ToNumber(x) olsun.

  2. Eğer n; NaN, +0𝔽, -0𝔽 veya +∞𝔽 değerlerinden biri ise, n döndür.

  3. Eğer n -∞𝔽 ise, -1𝔽 döndür.

  4. exp, (n) değerinin üstel işlevi olsun.

  5. exp - 1 değerini temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

21.3.2.16 Math.floor ( x )

Bu işlev, x'ten büyük olmayan en büyük (+∞'a en yakın) tam sayı Sayı (integral Number) değerini döndürür. Eğer x zaten bir tam sayı Sayı (integral Number) ise, sonuç x olur.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, ? ToNumber(x) olsun.

  2. Eğer n sonlu (finite) değilse veya n; +0𝔽 ya da -0𝔽 ise, n döndür.

  3. Eğer n < 1𝔽 ve n > +0𝔽 ise, +0𝔽 döndür.

  4. Eğer n bir tam sayı Sayı (integral Number) ise, n döndür.

  5. n'den büyük olmayan en büyük (+∞'a en yakın) tam sayı Sayı (integral Number) değerini döndür.

21.3.2.17 Math.fround ( x )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, ? ToNumber(x) olsun.

  2. Eğer n NaN ise, NaN döndür.

  3. Eğer n; +0𝔽, -0𝔽, +∞𝔽 veya -∞𝔽 değerlerinden biri ise, n döndür.

  4. n32, n değerinin roundTiesToEven modu kullanılarak IEEE 754-2019 binary32 biçimine dönüştürülmesinin sonucu olsun.

  5. n64, n32 değerinin IEEE 754-2019 binary64 biçimine dönüştürülmesinin sonucu olsun.

  6. n64 değerine karşılık gelen ECMAScript Sayı değerini döndür.

21.3.2.18 Math.f16round ( x )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, ? ToNumber(x) olsun.

  2. Eğer n NaN ise, NaN döndür.

  3. Eğer n; +0𝔽, -0𝔽, +∞𝔽 veya -∞𝔽 değerlerinden biri ise, n döndür.

  4. n16, n değerinin roundTiesToEven modu kullanılarak IEEE 754-2019 binary16 biçimine dönüştürülmesinin sonucu olsun.

  5. n64, n16 değerinin IEEE 754-2019 binary64 biçimine dönüştürülmesinin sonucu olsun.

  6. n64 değerine karşılık gelen ECMAScript Sayı değerini döndür.

21.3.2.19 Math.hypot ( ...args )

Sıfır veya daha fazla argüman verildiğinde bu işlev, argümanlarının karelerinin toplamının karekökünü döndürür.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. coerced, yeni ve boş bir Liste (List) olsun.

  2. args listesindeki her bir arg öğesi için sırayla şunları yap:

    1. n, ? ToNumber(arg) olsun.

    2. n değerini coerced listesine ekle.

  3. coerced listesindeki her bir number öğesi için sırayla şunları yap:

    1. Eğer number; +∞𝔽 ya da -∞𝔽 ise, +∞𝔽 döndür.
  4. onlyZero true olsun.

  5. coerced listesindeki her bir number öğesi için sırayla şunları yap:

    1. Eğer number NaN ise, NaN döndür.

    2. Eğer number ne +0𝔽 ne de -0𝔽 ise, onlyZero değerini false olarak ayarla.

  6. Eğer onlyZero true ise, +0𝔽 döndür.

  7. coerced öğelerinin matematiksel değerlerinin (mathematical values) karelerinin toplamının karekökünü temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

Bu işlevin "length" özelliğinin değeri 2𝔽'dir.

21.3.2.20 Math.imul ( x, y )

Bu işlev, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. a, (? ToUint32(x)) olsun.

  2. b, (? ToUint32(y)) olsun.

  3. product, (a × b) modulo 232 olsun.

  4. Eğer product ≥ 231 ise, 𝔽(product - 232) döndür.

  5. 𝔽(product) döndür.

21.3.2.21 Math.log ( x )

Bu işlev, x'in doğal logaritmasını döndürür.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, ? ToNumber(x) olsun.

  2. Eğer n; NaN veya +∞𝔽 ise, n döndür.

  3. Eğer n 1𝔽 ise, +0𝔽 döndür.

  4. Eğer n; +0𝔽 ya da -0𝔽 ise, -∞𝔽 döndür.

  5. Eğer n < -0𝔽 ise, NaN döndür.

  6. ln((n)) değerini temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

21.3.2.22 Math.log1p ( x )

Bu işlev, 1 + x'in doğal logaritmasını döndürür. Sonuç, x'in değeri sıfıra yakın olduğunda bile doğru olacak şekilde hesaplanır.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, ? ToNumber(x) olsun.

  2. Eğer n; NaN, +0𝔽, -0𝔽 veya +∞𝔽 değerlerinden biri ise, n döndür.

  3. Eğer n -1𝔽 ise, -∞𝔽 döndür.

  4. Eğer n < -1𝔽 ise, NaN döndür.

  5. ln(1 + (n)) değerini temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

21.3.2.23 Math.log10 ( x )

Bu işlev, x'in 10 tabanına göre logaritmasını döndürür.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, ? ToNumber(x) olsun.

  2. Eğer n; NaN veya +∞𝔽 ise, n döndür.

  3. Eğer n 1𝔽 ise, +0𝔽 döndür.

  4. Eğer n; +0𝔽 ya da -0𝔽 ise, -∞𝔽 döndür.

  5. Eğer n < -0𝔽 ise, NaN döndür.

  6. log10((n)) değerini temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

21.3.2.24 Math.log2 ( x )

Bu işlev, x'in 2 tabanına göre logaritmasını döndürür.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, ? ToNumber(x) olsun.

  2. Eğer n; NaN veya +∞𝔽 ise, n döndür.

  3. Eğer n 1𝔽 ise, +0𝔽 döndür.

  4. Eğer n; +0𝔽 ya da -0𝔽 ise, -∞𝔽 döndür.

  5. Eğer n < -0𝔽 ise, NaN döndür.

  6. log2((n)) değerini temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

21.3.2.25 Math.max ( ...args )

Sıfır veya daha fazla argüman verildiğinde, bu işlev her bir argüman üzerinde ToNumber işlemini çağırır ve sonuç değerlerinin en büyüğünü döndürür.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. coerced, yeni ve boş bir Liste (List) olsun.

  2. args listesindeki her bir arg öğesi için sırayla şunları yap:

    1. n, ? ToNumber(arg) olsun.

    2. n değerini coerced listesine ekle.

  3. highest, -∞𝔽 olsun.

  4. coerced listesindeki her bir number öğesi için sırayla şunları yap:

    1. Eğer number NaN ise, NaN döndür.

    2. Eğer number +0𝔽 ise ve highest -0𝔽 ise, highest değerini +0𝔽 olarak ayarla.

    3. Eğer number > highest ise, highest değerini number olarak ayarla.

  5. highest değerini döndür.

Bu işlevin "length" özelliği 2𝔽'dir.

21.3.2.26 Math.min ( ...args )

Sıfır veya daha fazla argüman verildiğinde, bu işlev her bir argüman üzerinde ToNumber işlemini çağırır ve sonuç değerlerinin en küçüğünü döndürür.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. coerced, yeni ve boş bir Liste (List) olsun.

  2. args listesindeki her bir arg öğesi için sırayla şunları yap:

    1. n, ? ToNumber(arg) olsun.

    2. n değerini coerced listesine ekle.

  3. lowest, +∞𝔽 olsun.

  4. coerced listesindeki her bir number öğesi için sırayla şunları yap:

    1. Eğer number NaN ise, NaN döndür.

    2. Eğer number -0𝔽 ise ve lowest +0𝔽 ise, lowest değerini -0𝔽 olarak ayarla.

    3. Eğer number < lowest ise, lowest değerini number olarak ayarla.

  5. lowest değerini döndür.

Bu işlevin "length" özelliği 2𝔽'dir.

21.3.2.27 Math.pow ( base, exponent )

Bu işlev çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. base değerini ? ToNumber(base) olarak ayarla.

  2. exponent değerini ? ToNumber(exponent) olarak ayarla.

  3. Number::exponentiate(base, exponent) değerini döndür.

21.3.2.28 Math.random ( )

Bu işlev; pozitif işaretli, +0𝔽 değerine eşit veya bu değerden büyük ancak 1𝔽 değerinden kesin olarak küçük olan, bu aralık üzerinde yaklaşık olarak homojen (uniform) bir dağılıma sahip olacak şekilde rastgele veya sözde rastgele seçilmiş bir Sayı değerini, uygulama tarafından tanımlanmış (implementation-defined) bir algoritma veya strateji kullanarak döndürür.

Farklı bölgeler (realms) için oluşturulan her bir Math.random işlevi, art arda yapılan çağrılarda birbirinden farklı bir değer dizisi üretmelidir.

21.3.2.29 Math.round ( x )

Bu işlev, x'e en yakın ve tam sayı olan Sayı değerini döndürür. Eğer iki tam sayı Sayı (integral Number) değeri x'e eşit derecede yakınsa, sonuç +∞'a daha yakın olan Sayı değeridir. Eğer x zaten bir tam sayı ise, sonuç x olur.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, ? ToNumber(x) olsun.

  2. Eğer n sonlu (finite) değilse veya n bir tam sayı Sayı (integral Number) ise, n döndür.

  3. Eğer n < 0.5𝔽 ve n > +0𝔽 ise, +0𝔽 döndür.

  4. Eğer n < -0𝔽 ve n-0.5𝔽 ise, -0𝔽 döndür.

  5. Eşitlik durumunda +∞'a daha yakın olan Sayıyı tercih ederek, n'ye en yakın tam sayı Sayıyı (integral Number) döndür.

21.3.2.30 Math.sign ( x )

Bu işlev, x'in pozitif, negatif veya sıfır olduğunu belirten işaretini döndürür.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, ? ToNumber(x) olsun.

  2. Eğer n; NaN, +0𝔽 veya -0𝔽 değerlerinden biri ise, n döndür.

  3. Eğer n < -0𝔽 ise, -1𝔽 döndür.

  4. 1𝔽 döndür.

21.3.2.31 Math.sin ( x )

Bu işlev, x'in sinüsünü döndürür. Argüman radyan cinsinden ifade edilir.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, ? ToNumber(x) olsun.

  2. Eğer n; NaN, +0𝔽 veya -0𝔽 değerlerinden biri ise, n döndür.

  3. Eğer n; +∞𝔽 ya da -∞𝔽 ise, NaN döndür.

  4. (n) değerinin sinüsünü temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

21.3.2.32 Math.sinh ( x )

Bu işlev, x'in hiperbolik sinüsünü döndürür.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, ? ToNumber(x) olsun.

  2. Eğer n sonlu (finite) değilse ya da n; +0𝔽 veya -0𝔽 ise, n döndür.

  3. (n) değerinin hiperbolik sinüsünü temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

21.3.2.33 Math.sqrt ( x )

Bu işlev, x'in karekökünü döndürür.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, ? ToNumber(x) olsun.

  2. Eğer n; NaN, +0𝔽, -0𝔽 veya +∞𝔽 değerlerinden biri ise, n döndür.

  3. Eğer n < -0𝔽 ise, NaN döndür.

  4. 𝔽((n) değerinin karekökü) döndür.

21.3.2.34 Math.sumPrecise ( items )

Sayıların bir yinelenebiliri (iterable) verildiğinde, bu işlev yinelenebilirdeki (iterable) her bir değeri toplar ve bunların toplamını döndürür. Eğer herhangi bir değer Sayı değilse (is not a Number), bir TypeError istisnası fırlatır.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ? RequireObjectCoercible(items) işlemini gerçekleştir.

  2. iteratorRecord, ? GetIterator(items, sync) olsun.

  3. state, minus-zero olsun.

  4. sum, 0 olsun.

  5. count, 0 olsun.

  6. next, not-started olsun.

  7. next değeri done olana kadar tekrarla:

    1. next değerini ? IteratorStepValue(iteratorRecord) olarak ayarla.

    2. Eğer next done değilse, o halde

      1. Eğer count ≥ 253 - 1 ise, o halde

         1. [NOT (NOTE)](06_sec-notational-conventions.md#note-step): Uygulamaların, bu belirtimi ihlal etmeden girdilerin “makul boyutta” olmasına güvenebilmesi amacıyla bu adım eklenmiştir; normal şartlarda bu adıma ulaşılması beklenmez.
        
         2. *error*, [ThrowCompletion](07_sec-ecmascript-data-types-and-values.md#sec-throwcompletion)(yeni oluşturulan bir `RangeError` nesnesi) olsun.
        
         3. Dön döndür: ? [IteratorClose](08_sec-abstract-operations.md#sec-iteratorclose)(*iteratorRecord*, *error*).
      2. Eğer next bir Sayı değilse (is not a Number), o halde

         1. *error*, [ThrowCompletion](07_sec-ecmascript-data-types-and-values.md#sec-throwcompletion)(yeni oluşturulan bir `TypeError` nesnesi) olsun.
        
         2. Dön döndür: ? [IteratorClose](08_sec-abstract-operations.md#sec-iteratorclose)(*iteratorRecord*, *error*).
      3. n, next olsun.

      4. Eğer state not-a-number değilse, o halde

         1. Eğer *n* `NaN` ise, o halde
           
                   1. *state* değerini `not-a-number` olarak ayarla.
        
         2. Aksi takdirde, eğer *n* `+∞`<sub>𝔽</sub> ise, o halde
           
                   1. Eğer *state* `minus-infinity` ise, *state* değerini `not-a-number` olarak ayarla.
           
                   2. Aksi takdirde, *state* değerini `plus-infinity` olarak ayarla.
        
         3. Aksi takdirde, eğer *n* `-∞`<sub>𝔽</sub> ise, o halde
           
                   1. Eğer *state* `plus-infinity` ise, *state* değerini `not-a-number` olarak ayarla.
           
                   2. Aksi takdirde, *state* değerini `minus-infinity` olarak ayarla.
        
         4. Aksi takdirde, eğer *n* `-0`<sub>𝔽</sub> değilse ve *state*; `minus-zero` veya `finite` değerlerinden biri ise, o halde
           
                   1. *state* değerini `finite` olarak ayarla.
           
                   2. *sum* değerini *sum* + [ℝ](06_sec-notational-conventions.md#ℝ)(*n*) olarak ayarla.
      5. count değerini count + 1 olarak ayarla.

  8. Eğer state not-a-number ise, NaN döndür.

  9. Eğer state plus-infinity ise, +∞𝔽 döndür.

  10. Eğer state minus-infinity ise, -∞𝔽 döndür.

  11. Eğer state minus-zero ise, -0𝔽 döndür.

  12. 𝔽(sum) döndür.

21.3.2.35 Math.tan ( x )

Bu işlev, x'in tanjantını döndürür. Argüman radyan cinsinden ifade edilir.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, ? ToNumber(x) olsun.

  2. Eğer n; NaN, +0𝔽 veya -0𝔽 değerlerinden biri ise, n döndür.

  3. Eğer n; +∞𝔽 ya da -∞𝔽 ise, NaN döndür.

  4. (n) değerinin tanjantını temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

21.3.2.36 Math.tanh ( x )

Bu işlev, x'in hiperbolik tanjantını döndürür.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, ? ToNumber(x) olsun.

  2. Eğer n; NaN, +0𝔽 veya -0𝔽 değerlerinden biri ise, n döndür.

  3. Eğer n +∞𝔽 ise, 1𝔽 döndür.

  4. Eğer n -∞𝔽 ise, -1𝔽 döndür.

  5. (n) değerinin hiperbolik tanjantını temsil eden ve uygulama tarafından yakınsanan (implementation-approximated) bir Sayı değeri döndür.

21.3.2.37 Math.trunc ( x )

Bu işlev, Sayı x'in kesirli basamaklarını atarak tam sayı kısmını döndürür. Eğer x zaten bir tam sayı ise, sonuç x olur.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. n, ? ToNumber(x) olsun.

  2. Eğer n sonlu (finite) değilse ya da n; +0𝔽 veya -0𝔽 ise, n döndür.

  3. Eğer n < 1𝔽 ve n > +0𝔽 ise, +0𝔽 döndür.

  4. Eğer n < -0𝔽 ve n > -1𝔽 ise, -0𝔽 döndür.

  5. n'ye +0𝔽 yönünde en yakın olan tam sayı Sayıyı (integral Number) döndür.

21.4 Tarih Nesneleri (Date Objects)

21.4.1 Tarih Nesnelerine Genel Bakış ve Soyut İşlemlerin Tanımları

Aşağıdaki soyut işlemler, (21.4.1.1 altında tanımlanan) zaman değerleri üzerinde işlem yapar. Her durumda, bu işlevlerden herhangi birine verilen argüman NaN ise, sonucun da NaN olacağını unutmayın.

21.4.1.1 Zaman Değerleri ve Zaman Aralığı

ECMAScript'te zaman ölçümü POSIX'teki zaman ölçümüne benzerdir; özellikle artık Miladi takvim (proleptic Gregorian calendar), UTC saat dilimine göre 1 Ocak 1970 tarihinin başlangıcındaki gece yarısı olan bir başlangıç noktası (epoch) ve her günün tam olarak 86.400 saniyeden (her biri 1000 milisaniye uzunluğunda) oluştuğu kabulünü paylaşır.

Bir ECMAScript zaman değeri, milisaniye hassasiyetinde bir zaman anını temsil eden sonlu (finite) bir tam sayı Sayı (integral Number) ya da belirli bir anı temsil etmeyen NaN olan bir Sayıdır. 24 × 60 × 60 × 1000 = 86.400.000'in katı olan (yani bazı d tam sayıları (integers) için 86.400.000 × d olan) bir zaman değeri, başlangıç noktasını (epoch) d tam UTC günü kadar takip eden (negatif d için başlangıç noktasından (epoch) önce gelen) UTC gününün başlangıcındaki anı temsil eder. Diğer her sonlu zaman değeri tv, kendisinden önce gelen bu tür en büyük kat olan s zaman değerine göre tanımlanır ve s ile aynı UTC günü içinde gerçekleşen ancak onu (tv - s) milisaniye takip eden anı temsil eder.

Zaman değerleri UTC artık saniyelerini hesaba katmaz; pozitif artık saniyeler içindeki anları temsil eden hiçbir zaman değeri yoktur ve negatif artık saniyeler nedeniyle UTC zaman çizelgesinden çıkarılan anları temsil eden zaman değerleri mevcuttur. Bununla birlikte, zaman değerlerinin tanımı yine de UTC ile parçalı uyum sağlar; tutarsızlıklar yalnızca artık saniye sınırlarında oluşur ve artık saniyelerin dışında sıfır fark vardır.

Bir Sayı, -9.007.199.254.740.992 ile 9.007.199.254.740.992 arasındaki tüm tam sayıları (integers) tam olarak temsil edebilir (21.1.2.8 ve 21.1.2.6). Bir zaman değeri ise bundan biraz daha küçük bir aralık olan -8.640.000.000.000.000 ile 8.640.000.000.000.000 milisaniye aralığını destekler. Bu, UTC 1 Ocak 1970 başlangıcındaki gece yarısına göre tam olarak -100.000.000 gün ile 100.000.000 gün arasında desteklenen bir zaman değeri aralığı sağlar.

UTC 1 Ocak 1970 başlangıcındaki gece yarısının tam anı, +0𝔽 zaman değeriyle temsil edilir.

Bu sabitlere ilerleyen bölümlerdeki algoritmalar tarafından atıfta bulunulur.

HoursPerDay = 24MinutesPerHour = 60SecondsPerMinute = 60msPerSecond = 1000𝔽msPerMinute = 60000𝔽 = msPerSecond × 𝔽(SecondsPerMinute)msPerHour = 3600000𝔽 = msPerMinute × 𝔽(MinutesPerHour)msPerDay = 86400000𝔽 = msPerHour × 𝔽(HoursPerDay)

21.4.1.3 Day ( tv )

Soyut işlem Day, tv (sonlu (finite) bir zaman değeri) argümanını alır ve bir tam sayı Sayı (integral Number) döndürür. tv'nin düştüğü günün gün numarasını döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. 𝔽(floor((tv / msPerDay))) döndür.

21.4.1.4 TimeWithinDay ( tv )

Soyut işlem TimeWithinDay, tv (sonlu (finite) bir zaman değeri) argümanını alır ve +0𝔽 (dahil) ile msPerDay (hariç) arasındaki aralıkta (interval) yer alan bir tam sayı Sayı (integral Number) döndürür. tv'nin düştüğü günün başlangıcından itibaren geçen milisaniye sayısını döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. 𝔽((tv) modulo (msPerDay)) döndür.

21.4.1.5 DaysInYear ( y )

Soyut işlem DaysInYear, y (bir tam sayı Sayı (integral Number)) argümanını alır ve 365𝔽 ya da 366𝔽 döndürür. y yılındaki gün sayısını döndürür. Artık yıllarda 366 gün vardır; diğer tüm yıllarda 365 gün vardır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ry, (y) olsun.

  2. Eğer (ry modulo 400) = 0 ise, 366𝔽 döndür.

  3. Eğer (ry modulo 100) = 0 ise, 365𝔽 döndür.

  4. Eğer (ry modulo 4) = 0 ise, 366𝔽 döndür.

  5. 365𝔽 döndür.

21.4.1.6 DayFromYear ( y )

Soyut işlem DayFromYear, y (bir tam sayı Sayı (integral Number)) argümanını alır ve bir tam sayı Sayı (integral Number) döndürür. y yılının ilk gününün gün numarasını döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. ry, (y) olsun.

  2. NOT (NOTE): Takip eden adımlarda numberYears1, numberYears4, numberYears100 ve numberYears400 sırasıyla başlangıç noktası (epoch) ile y yılının başlangıcı arasında gerçekleşen 1, 4, 100 ve 400 ile bölünebilen yılların sayısını temsil eder. Eğer y yılı başlangıç noktasından (epoch) önce ise bu sayı negatiftir.

  3. numberYears1, (ry - 1970) olsun.

  4. numberYears4, floor((ry - 1969) / 4) olsun.

  5. numberYears100, floor((ry - 1901) / 100) olsun.

  6. numberYears400, floor((ry - 1601) / 400) olsun.

  7. 𝔽(365 × numberYears1 + numberYears4 - numberYears100 + numberYears400) döndür.

21.4.1.7 TimeFromYear ( y )

Soyut işlem TimeFromYear, y (bir tam sayı Sayı (integral Number)) argümanını alır ve bir zaman değeri döndürür. y yılının başlangıcındaki zaman değerini döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. msPerDay × DayFromYear(y) döndür.

21.4.1.8 YearFromTime ( tv )

Soyut işlem YearFromTime, tv (sonlu (finite) bir zaman değeri) argümanını alır ve bir tam sayı Sayı (integral Number) döndürür. tv'nin düştüğü yılı döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. TimeFromYear(y) ≤ tv olacak şekildeki en büyük (ve +∞'a en yakın) y tam sayı Sayısını (integral Number) döndür.

21.4.1.9 DayWithinYear ( tv )

Soyut işlem DayWithinYear, tv (sonlu (finite) bir zaman değeri) argümanını alır ve +0𝔽 ile 365𝔽 arasındaki kapalı aralıkta (inclusive interval) yer alan bir tam sayı Sayı (integral Number) döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Day(tv) - DayFromYear(YearFromTime(tv)) döndür.

21.4.1.10 InLeapYear ( tv )

Soyut işlem InLeapYear, tv (sonlu (finite) bir zaman değeri) argümanını alır ve +0𝔽 ya da 1𝔽 döndürür. Eğer tv bir artık yıl içindeyde 1𝔽, aksi takdirde +0𝔽 döndür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer DaysInYear(YearFromTime(tv)) değeri 366𝔽 ise, 1𝔽 döndür.

  2. +0𝔽 döndür.

21.4.1.11 MonthFromTime ( tv )

Soyut işlem MonthFromTime, tv (sonlu (finite) bir zaman değeri) argümanını alır ve +0𝔽 ile 11𝔽 arasındaki kapalı aralıkta (inclusive interval) yer alan bir tam sayı Sayı (integral Number) döndürür. tv'nin düştüğü ayı tanımlayan bir Sayı döndür. +0𝔽 ay değeri Ocak ayını; 1𝔽 Şubat ayını; 2𝔽 Mart ayını; 3𝔽 Nisan ayını; 4𝔽 Mayıs ayını; 5𝔽 Haziran ayını; 6𝔽 Temmuz ayını; 7𝔽 Ağustos ayını; 8𝔽 Eylül ayını; 9𝔽 Ekim ayını; 10𝔽 Kasım ayını ve 11𝔽 Aralık ayını belirtir. MonthFromTime(+0𝔽) = +0𝔽 olduğunu ve bunun 1 Ocak 1970 Perşembe gününe karşılık geldiğini unutmayın. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. inLeapYear, InLeapYear(tv) olsun.

  2. dayWithinYear, DayWithinYear(tv) olsun.

  3. Eğer dayWithinYear < 31𝔽 ise, +0𝔽 döndür.

  4. Eğer dayWithinYear < 59𝔽 + inLeapYear ise, 1𝔽 döndür.

  5. Eğer dayWithinYear < 90𝔽 + inLeapYear ise, 2𝔽 döndür.

  6. Eğer dayWithinYear < 120𝔽 + inLeapYear ise, 3𝔽 döndür.

  7. Eğer dayWithinYear < 151𝔽 + inLeapYear ise, 4𝔽 döndür.

  8. Eğer dayWithinYear < 181𝔽 + inLeapYear ise, 5𝔽 döndür.

  9. Eğer dayWithinYear < 212𝔽 + inLeapYear ise, 6𝔽 döndür.

  10. Eğer dayWithinYear < 243𝔽 + inLeapYear ise, 7𝔽 döndür.

  11. Eğer dayWithinYear < 273𝔽 + inLeapYear ise, 8𝔽 döndür.

  12. Eğer dayWithinYear < 304𝔽 + inLeapYear ise, 9𝔽 döndür.

  13. Eğer dayWithinYear < 334𝔽 + inLeapYear ise, 10𝔽 döndür.

  14. İddia et (Assert): dayWithinYear < 365𝔽 + inLeapYear.

  15. 11𝔽 döndür.

21.4.1.12 DateFromTime ( tv )

Soyut işlem DateFromTime, tv (sonlu (finite) bir zaman değeri) argümanını alır ve 1𝔽 ile 31𝔽 arasındaki kapalı aralıkta (inclusive interval) yer alan bir tam sayı Sayı (integral Number) döndürür. tv'nin düştüğü ayın günü döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. inLeapYear, InLeapYear(tv) olsun.

  2. dayWithinYear, DayWithinYear(tv) olsun.

  3. month, MonthFromTime(tv) olsun.

  4. Eğer month +0𝔽 ise, dayWithinYear + 1𝔽 döndür.

  5. Eğer month 1𝔽 ise, dayWithinYear - 30𝔽 döndür.

  6. Eğer month 2𝔽 ise, dayWithinYear - 58𝔽 - inLeapYear döndür.

  7. Eğer month 3𝔽 ise, dayWithinYear - 89𝔽 - inLeapYear döndür.

  8. Eğer month 4𝔽 ise, dayWithinYear - 119𝔽 - inLeapYear döndür.

  9. Eğer month 5𝔽 ise, dayWithinYear - 150𝔽 - inLeapYear döndür.

  10. Eğer month 6𝔽 ise, dayWithinYear - 180𝔽 - inLeapYear döndür.

  11. Eğer month 7𝔽 ise, dayWithinYear - 211𝔽 - inLeapYear döndür.

  12. Eğer month 8𝔽 ise, dayWithinYear - 242𝔽 - inLeapYear döndür.

  13. Eğer month 9𝔽 ise, dayWithinYear - 272𝔽 - inLeapYear döndür.

  14. Eğer month 10𝔽 ise, dayWithinYear - 303𝔽 - inLeapYear döndür.

  15. İddia et (Assert): month 11𝔽'dir.

  16. dayWithinYear - 333𝔽 - inLeapYear döndür.

21.4.1.13 WeekDay ( tv )

Soyut işlem WeekDay, tv (sonlu (finite) bir zaman değeri) argümanını alır ve +0𝔽 ile 6𝔽 arasındaki kapalı aralıkta (inclusive interval) yer alan bir tam sayı Sayı (integral Number) döndürür. tv'nin düştüğü haftanın gününü tanımlayan bir Sayı döndür. +0𝔽 hafta içi değeri Pazar gününü; 1𝔽 Pazartesi gününü; 2𝔽 Salı gününü; 3𝔽 Çarşamba gününü; 4𝔽 Perşembe gününü; 5𝔽 Cuma gününü ve 6𝔽 Cumartesi gününü belirtir. WeekDay(+0𝔽) = 4𝔽 olduğunu ve bunun 1 Ocak 1970 Perşembe gününe karşılık geldiğini unutmayın. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. 𝔽((Day(tv) + 4𝔽) modulo 7) döndür.

21.4.1.14 HourFromTime ( tv )

Soyut işlem HourFromTime, tv (sonlu (finite) bir zaman değeri) argümanını alır ve +0𝔽 ile 23𝔽 arasındaki kapalı aralıkta (inclusive interval) yer alan bir tam sayı Sayı (integral Number) döndürür. tv'nin düştüğü günün saatini döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. 𝔽(floor((tv / msPerHour)) modulo HoursPerDay) döndür.

21.4.1.15 MinFromTime ( tv )

Soyut işlem MinFromTime, tv (sonlu (finite) bir zaman değeri) argümanını alır ve +0𝔽 ile 59𝔽 arasındaki kapalı aralıkta (inclusive interval) yer alan bir tam sayı Sayı (integral Number) döndürür. tv'nin düştüğü saatin dakikasını döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. 𝔽(floor((tv / msPerMinute)) modulo MinutesPerHour) döndür.

21.4.1.16 SecFromTime ( tv )

Soyut işlem SecFromTime, tv (sonlu (finite) bir zaman değeri) argümanını alır ve +0𝔽 ile 59𝔽 arasındaki kapalı aralıkta (inclusive interval) yer alan bir tam sayı Sayı (integral Number) döndürür. tv'nin düştüğü dakikanın saniyesini döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. 𝔽(floor((tv / msPerSecond)) modulo SecondsPerMinute) döndür.

21.4.1.17 msFromTime ( tv )

Soyut işlem msFromTime, tv (sonlu (finite) bir zaman değeri) argümanını alır ve +0𝔽 ile 999𝔽 arasındaki kapalı aralıkta (inclusive interval) yer alan bir tam sayı Sayı (integral Number) döndürür. tv'nin düştüğü saniyenin milisaniyesini döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. 𝔽((tv) modulo (msPerSecond)) döndür.

21.4.1.18 GetUTCEpochNanoseconds ( year, month, day, hour, minute, second, millisecond, microsecond, nanosecond )

Soyut işlem GetUTCEpochNanoseconds; year (bir tam sayı (integer)), month (1 ile 12 arasındaki kapalı aralıkta (inclusive interval) yer alan bir tam sayı (integer)), day (1 ile 31 arasındaki kapalı aralıkta (inclusive interval) yer alan bir tam sayı (integer)), hour (0 ile 23 arasındaki kapalı aralıkta (inclusive interval) yer alan bir tam sayı (integer)), minute (0 ile 59 arasındaki kapalı aralıkta (inclusive interval) yer alan bir tam sayı (integer)), second (0 ile 59 arasındaki kapalı aralıkta (inclusive interval) yer alan bir tam sayı (integer)), millisecond (0 ile 999 arasındaki kapalı aralıkta (inclusive interval) yer alan bir tam sayı (integer)), microsecond (0 ile 999 arasındaki kapalı aralıkta (inclusive interval) yer alan bir tam sayı (integer)) ve nanosecond (0 ile 999 arasındaki kapalı aralıkta (inclusive interval) yer alan bir tam sayı (integer)) argümanlarını alır ve bir BigInt döndürür. Döndürülen değer, UTC'de verilen ISO 8601 takvim tarihine ve saatine karşılık gelen, başlangıç noktasından (epoch) itibaren geçen nanosaniye sayısını temsil eder. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. date, MakeDay(𝔽(year), 𝔽(month - 1), 𝔽(day)) olsun.

  2. time, MakeTime(𝔽(hour), 𝔽(minute), 𝔽(second), 𝔽(millisecond)) olsun.

  3. ms, MakeDate(date, time) olsun.

  4. İddia et (Assert): ms, bir tam sayı Sayıdır (integral Number).

  5. ((ms) × 106 + microsecond × 103 + nanosecond) döndür.

21.4.1.19 Zaman Dilimi Tanımlayıcıları (Time Zone Identifiers)

ECMAScript'teki zaman dilimleri, tamamen 0x0000 ile 0x007F arasındaki kapalı aralıkta (inclusive interval) yer alan kod birimlerinden oluşan Dizgiler (Strings) olan zaman dilimi tanımlayıcıları ile temsil edilir. Bir ECMAScript uygulaması tarafından desteklenen zaman dilimleri, AvailableNamedTimeZoneIdentifiers tarafından döndürülen Zaman Dilimi Tanımlayıcı Kayıtlarının (Time Zone Identifier Records) [[Identifier]] alanı tarafından temsil edilen mevcut adlandırılmış zaman dilimleri veya IsTimeZoneOffsetString işleminin true döndürdüğü Dizgiler ile temsil edilen fark (offset) zaman dilimleri olabilir.

Bir birincil zaman dilimi tanımlayıcısı (primary time zone identifier), mevcut adlandırılmış bir zaman dilimi için tercih edilen tanımlayıcıdir. Birincil olmayan zaman dilimi tanımlayıcısı (non-primary time zone identifier), mevcut adlandırılmış bir zaman dilimi için birincil zaman dilimi tanımlayıcısı olmayan bir tanımlayıcıdır. Mevcut adlandırılmış bir zaman dilimi tanımlayıcısı, ya bir birincil zaman dilimi tanımlayıcısı ya da birincil olmayan bir zaman dilimi tanımlayıcısıdır. Mevcut adlandırılmış her zaman dilimi tanımlayıcısı, tam olarak bir mevcut adlandırılmış zaman dilimi ile ilişkilendirilir. Mevcut adlandırılmış her zaman dilimi, tam olarak bir birincil zaman dilimi tanımlayıcısı ve sıfır veya daha fazla birincil olmayan zaman dilimi tanımlayıcısı ile ilişkilendirilir.

ECMAScript uygulamaları, UTC zaman dilimi için birincil zaman dilimi tanımlayıcısı olması gereken "UTC" tanımlayıcısına sahip mevcut adlandırılmış bir zaman dilimini desteklemelidir. Ayrıca uygulamalar, herhangi bir sayıda diğer mevcut adlandırılmış zaman dilimlerini de destekleyebilir.

ECMA-402 Uluslararasılaştırma API'si belirtiminde açıklandığı şekilde zaman dilimlerine yönelik gereksinimleri karşılayan uygulamalar zaman dilimi duyarlı (time zone aware) olarak adlandırılır. Zaman dilimi duyarlı uygulamalar, IANA Zaman Dilimi Veritabanının (IANA Time Zone Database) Bölge (Zone) ve Bağlantı (Link) adlarına karşılık gelen mevcut adlandırılmış zaman dilimlerini ve yalnızca bu tür adları desteklemelidir. Zaman dilimi duyarlı uygulamalarda, ECMA-402 belirtiminde açıklandığı üzere AvailableNamedTimeZoneIdentifiers tarafından özel olarak geçersiz kılınmadığı sürece, sırasıyla bir birincil zaman dilimi tanımlayıcısı IANA Zaman Dilimi Veritabanındaki bir Bölge (Zone) adıdır ve birincil olmayan bir zaman dilimi tanımlayıcısı bir Bağlantı (Link) adıdır. IANA Zaman Dilimi Veritabanının tamamını desteklemeyen uygulamaların da zaman dilimlerini temsil etmek için tanımlayıcı olarak IANA Zaman Dilimi Veritabanı adlarını kullanması önerilir.

21.4.1.20 GetNamedTimeZoneEpochNanoseconds ( timeZoneIdentifier, year, month, day, hour, minute, second, millisecond, microsecond, nanosecond )

Uygulama tarafından tanımlanan (implementation-defined) soyut işlem GetNamedTimeZoneEpochNanoseconds; timeZoneIdentifier (bir Dizgi), year (bir tam sayı (integer)), month (1 ile 12 arasındaki kapalı aralıkta (inclusive interval) yer alan bir tam sayı (integer)), day (1 ile 31 arasındaki kapalı aralıkta (inclusive interval) yer alan bir tam sayı (integer)), hour (0 ile 23 arasındaki kapalı aralıkta (inclusive interval) yer alan bir tam sayı (integer)), minute (0 ile 59 arasındaki kapalı aralıkta (inclusive interval) yer alan bir tam sayı (integer)), second (0 ile 59 arasındaki kapalı aralıkta (inclusive interval) yer alan bir tam sayı (integer)), millisecond (0 ile 999 arasındaki kapalı aralıkta (inclusive interval) yer alan bir tam sayı (integer)), microsecond (0 ile 999 arasındaki kapalı aralıkta (inclusive interval) yer alan bir tam sayı (integer)) ve nanosecond (0 ile 999 arasındaki kapalı aralıkta (inclusive interval) yer alan bir tam sayı (integer)) argümanlarını alır ve BigInt'lerden oluşan bir Liste (List) döndürür. Döndürülen Listedeki (List) her bir değer, timeZoneIdentifier ile tanımlanan adlandırılmış zaman dilimindeki verilen ISO 8601 takvim tarihine ve duvar saatine karşılık gelen, başlangıç noktasından (epoch) itibaren geçen nanosaniye sayısını temsil eder.

Girdi, negatif bir zaman dilimi geçişi (örneğin yaz saati uygulaması sona erdiğinde veya zaman dilimi kuralı değişikliği nedeniyle zaman dilimi farkı azaldığında) nedeniyle birden fazla kez gerçekleşen yerel bir saati temsil ettiğinde, döndürülen Liste (List) birden fazla öğeye sahip olur ve artan sayısal değere göre sıralanır. Girdi, pozitif bir zaman dilimi geçişi (örneğin yaz saati uygulaması başladığında veya zaman dilimi kuralı değişikliği nedeniyle zaman dilimi farkı arttığında) nedeniyle atlanan yerel bir saati temsil ettiğinde, döndürülen Liste (List) boş olacaktır. Aksi takdirde, döndürülen Listenin (List) bir öğesi olacaktır.

GetNamedTimeZoneEpochNanoseconds soyut işleminin, herhangi bir zaman dilimi için yerel siyasi kuralları içermeyen ECMAScript uygulamaları için kullanılacak varsayılan uygulaması, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. İddia et (Assert): timeZoneIdentifier, "UTC"dir.

  2. epochNanoseconds, GetUTCEpochNanoseconds(year, month, day, hour, minute, second, millisecond, microsecond, nanosecond) olsun.

  3. « epochNanoseconds » döndür.

21.4.1.21 GetNamedTimeZoneOffsetNanoseconds ( timeZoneIdentifier, epochNanoseconds )

Uygulama tarafından tanımlanan (implementation-defined) soyut işlem GetNamedTimeZoneOffsetNanoseconds; timeZoneIdentifier (bir Dizgi) ve epochNanoseconds (bir BigInt) argümanlarını alır ve bir tam sayı (integer) döndürür.

Döndürülen tam sayı (integer), timeZoneIdentifier ile tanımlanan adlandırılmış zaman diliminin, her ikisi de nanosaniye cinsinden olmak üzere, başlangıç noktasına (epoch) göre epochNanoseconds'a karşılık gelen andaki UTC'den olan farkını (offset) temsil eder.

GetNamedTimeZoneOffsetNanoseconds soyut işleminin, herhangi bir zaman dilimi için yerel siyasi kuralları içermeyen ECMAScript uygulamaları için kullanılacak varsayılan uygulaması, çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. İddia et (Assert): timeZoneIdentifier, "UTC"dir.

  2. 0 döndür.

21.4.1.22 Zaman Dilimi Tanımlayıcı Kaydı (Time Zone Identifier Record)

Bir Zaman Dilimi Tanımlayıcı Kaydı (Time Zone Identifier Record), mevcut adlandırılmış bir zaman dilimi tanımlayıcısını ve buna karşılık gelen birincil zaman dilimi tanımlayıcısını açıklamak için kullanılan bir Kayıttır (Record).

Zaman Dilimi Tanımlayıcı Kayıtları, Tablo 59 içinde listelenen alanlara sahiptir.

Tablo 59: Zaman Dilimi Tanımlayıcı Kaydı (Time Zone Identifier Record) Alanları

Alan Adı Değer Anlamı
[[Identifier]] bir Dizgi Uygulama tarafından desteklenen mevcut adlandırılmış bir zaman dilimi tanımlayıcısı.
[[PrimaryIdentifier]] bir Dizgi [[Identifier]] alanının çözümlendiği birincil zaman dilimi tanımlayıcısı.

21.4.1.23 AvailableNamedTimeZoneIdentifiers ( )

Uygulama tarafından tanımlanan (implementation-defined) soyut işlem AvailableNamedTimeZoneIdentifiers hiçbir argüman almaz ve Zaman Dilimi Tanımlayıcı Kayıtlarından (Time Zone Identifier Records) oluşan bir Liste (List) döndürür. Sonucu, bu uygulamadaki tüm mevcut adlandırılmış zaman dilimi tanımlayıcılarını ve her bir mevcut adlandırılmış zaman dilimi tanımlayıcısına karşılık gelen birincil zaman dilimi tanımlayıcısını açıklar. Liste (List), her bir Zaman Dilimi Tanımlayıcı Kaydının (Time Zone Identifier Record) [[Identifier]] alanına göre sıralanır.

ECMA-402 Uluslararasılaştırma API'sini uygulayan tüm uygulamalar da dahil olmak üzere, zaman dilimi duyarlı (time zone aware) uygulamalar, AvailableNamedTimeZoneIdentifiers soyut işlemini ECMA-402 belirtiminde açıklandığı şekilde uygulamalıdır. Zaman dilimi duyarlı (time zone aware) olmayan uygulamalar için AvailableNamedTimeZoneIdentifiers çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer uygulama herhangi bir zaman dilimi için yerel siyasi kuralları içermiyorsa, o halde

    1. « { [[Identifier]]: "UTC", [[PrimaryIdentifier]]: "UTC" } Zaman Dilimi Tanımlayıcı Kaydını (Time Zone Identifier Record) » döndür.
  2. identifiers, sözlük sırasına göre kod birimi düzenine (lexicographic code unit order) göre sıralanmış, benzersiz mevcut adlandırılmış zaman dilimi tanımlayıcılarının Listesi (List) olsun.

  3. result, yeni ve boş bir Liste (List) olsun.

  4. identifiers listesindeki her bir identifier öğesi için sırayla şunları yap:

    1. primary, identifier olsun.

    2. Eğer bu uygulamada identifier bir birincil olmayan zaman dilimi tanımlayıcısı ise ve identifier "UTC" değilse, o halde

      1. primary değerini, identifier ile ilişkili olan birincil zaman dilimi tanımlayıcısı olarak ayarla.

      2. NOT (NOTE): Bir uygulamanın, birincil zaman dilimi tanımlayıcısını elde etmek için identifier'ı yinelemeli olarak çözümlemesi gerekebilir.

    3. record, { [[Identifier]]: identifier, [[PrimaryIdentifier]]: primary } Zaman Dilimi Tanımlayıcı Kaydı (Time Zone Identifier Record) olsun.

    4. record değerini result listesine ekle.

  5. İddia et (Assert): result, record.[[Identifier]] değeri "UTC" ve record.[[PrimaryIdentifier]] değeri "UTC" olan bir Zaman Dilimi Tanımlayıcı Kaydı (Time Zone Identifier Record) record içerir.

  6. result döndür.

21.4.1.24 SystemTimeZoneIdentifier ( )

Uygulama tarafından tanımlanan (implementation-defined) soyut işlem SystemTimeZoneIdentifier hiçbir argüman almaz ve bir Dizgi (String) döndürür. Barındırıcı ortamın (host environment) geçerli zaman dilimini temsil eden, IsTimeZoneOffsetString işleminin true döndürdüğü bir UTC farkını temsil eden bir Dizgi ya da bir birincil zaman dilimi tanımlayıcısı olan bir Dizgi döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer uygulama yalnızca UTC zaman dilimini destekliyorsa, "UTC" döndür.

  2. systemTimeZoneString, barındırıcı ortamın (host environment) geçerli zaman dilimini temsil eden, ya bir birincil zaman dilimi tanımlayıcısı ya da bir fark zaman dilimi (offset time zone) tanımlayıcısı olan Dizgi olsun.

  3. systemTimeZoneString döndür.

21.4.1.25 LocalTime ( tv )

Soyut işlem LocalTime, tv (sonlu (finite) bir zaman değeri) argümanını alır ve bir tam sayı Sayı (integral Number) döndürür. tv değerini UTC'den yerel saate dönüştürür. Sonucu belirlemek için, bu bölümde belirtilen şekilde tv anında yürürlükte olan standart saat ve yaz saati uygulamalarına ilişkin yerel siyasi kurallar kullanılmalıdır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. systemTimeZoneIdentifier, SystemTimeZoneIdentifier() olsun.

  2. Eğer IsTimeZoneOffsetString(systemTimeZoneIdentifier) true ise, o halde

    1. offsetNs, ParseTimeZoneOffsetString(systemTimeZoneIdentifier) olsun.
  3. Aksi takdirde,

    1. offsetNs, GetNamedTimeZoneOffsetNanoseconds(systemTimeZoneIdentifier, ((tv) × 106)) olsun.
  4. offsetMs, truncate(offsetNs / 106) olsun.

  5. tv + 𝔽(offsetMs) döndür.

21.4.1.26 UTC ( t )

Soyut işlem UTC, t (bir Sayı) argümanını alır ve bir zaman değeri döndürür. t değerini yerel saatten bir UTC zaman değerine dönüştürür. Sonucu belirlemek için, bu bölümde belirtilen şekilde t anında yürürlükte olan standart saat ve yaz saati uygulamalarına ilişkin yerel siyasi kurallar kullanılmalıdır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer t sonlu (finite) değilse, NaN döndür.

  2. systemTimeZoneIdentifier, SystemTimeZoneIdentifier() olsun.

  3. Eğer IsTimeZoneOffsetString(systemTimeZoneIdentifier) true ise, o halde

    1. offsetNs, ParseTimeZoneOffsetString(systemTimeZoneIdentifier) olsun.
  4. Aksi takdirde,

    1. possibleInstants, GetNamedTimeZoneEpochNanoseconds(systemTimeZoneIdentifier, (YearFromTime(t)), (MonthFromTime(t)) + 1, (DateFromTime(t)), (HourFromTime(t)), (MinFromTime(t)), (SecFromTime(t)), (msFromTime(t)), 0, 0) olsun.

    2. NOT (NOTE): Takip eden adımlar; t, negatif bir zaman dilimi geçişinde (örneğin yaz saati uygulaması sona erdiğinde veya bir zaman dilimi kuralı değişikliği nedeniyle zaman dilimi farkı azaldığında) birden çok kez tekrarlanan yerel saati veya pozitif bir zaman dilimi geçişinde (örneğin yaz saati uygulaması başladığında veya bir zaman dilimi kuralı değişikliği nedeniyle zaman dilimi farkı arttığında) atlanan yerel saati temsil ettiğinde, t'nin geçişten önceki zaman dilimi farkı kullanılarak yorumlanmasını sağlar.

    3. Eğer possibleInstants boş değilse, o halde

      1. disambiguatedInstant, possibleInstants[0] olsun.
    4. Aksi takdirde,

      1. NOT (NOTE): t, pozitif bir zaman dilimi geçişinde (örneğin yaz saati uygulamasının başlaması veya UTC farkını artıran bir zaman dilimi kuralı değişikliği nedeniyle) atlanan yerel bir saati temsil eder.

      2. possibleInstantsBefore, GetNamedTimeZoneEpochNanoseconds(systemTimeZoneIdentifier, (YearFromTime(tBefore)), (MonthFromTime(tBefore)) + 1, (DateFromTime(tBefore)), (HourFromTime(tBefore)), (MinFromTime(tBefore)), (SecFromTime(tBefore)), (msFromTime(tBefore)), 0, 0) olsun; burada tBefore, possibleInstantsBefore listesinin boş olmadığı (yani tBefore geçişten önceki son yerel saati temsil eder) en büyük tam sayı Sayı (integral Number) < t değeridir.

      3. disambiguatedInstant, possibleInstantsBefore listesinin son öğesi olsun.

    5. offsetNs, GetNamedTimeZoneOffsetNanoseconds(systemTimeZoneIdentifier, disambiguatedInstant) olsun.

  5. offsetMs, truncate(offsetNs / 106) olsun.

  6. t - 𝔽(offsetMs) döndür.

Girdi t nominal olarak bir zaman değeridir ancak herhangi bir Sayı değeri de olabilir. Girdilerin, yerel UTC farkına bakılmaksızın zaman değeri aralığının sınırlarına karşılık gelen değerleri destekleyebilmesi için algoritma t'yi zaman değeri aralığıyla sınırlandırmamalıdır. Örneğin, maksimum zaman değeri "+275760-09-13T00:00:00Z" tarihine karşılık gelen 8,64 × 1015'tir. Yerel zaman dilimi farkının o anda UTC'den 1 saat ileride olduğu bir ortamda, bu durum "+275760-09-13T01:00:00+01:00" tarihine karşılık gelen daha büyük 8,64 × 1015 + 3,6 × 106 girdisiyle temsil edilir.

Yerel saat t için siyasi kurallar uygulama içinde mevcut değilse, sonuç t olur; çünkü SystemTimeZoneIdentifier "UTC" döndürür ve GetNamedTimeZoneOffsetNanoseconds 0 döndürür.

21.4.1.27 MakeTime ( hour, min, sec, ms )

Soyut işlem MakeTime; hour (bir Sayı), min (bir Sayı), sec (bir Sayı) ve ms (bir Sayı) argümanlarını alır ve bir Sayı döndürür. Bir milisaniye sayısını hesaplar. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer hour sonlu (finite) değilse, min sonlu (finite) değilse, sec sonlu (finite) değilse veya ms sonlu (finite) değilse, NaN döndür.

  2. h, 𝔽(! ToIntegerOrInfinity(hour)) olsun.

  3. m, 𝔽(! ToIntegerOrInfinity(min)) olsun.

  4. s, 𝔽(! ToIntegerOrInfinity(sec)) olsun.

  5. milli, 𝔽(! ToIntegerOrInfinity(ms)) olsun.

  6. ((h × msPerHour + m × msPerMinute) + s × msPerSecond) + milli döndür.

21.4.1.28 MakeDay ( year, month, date )

Soyut işlem MakeDay; year (bir Sayı), month (bir Sayı) ve date (bir Sayı) argümanlarını alır ve sonlu (finite) bir Sayı ya da NaN döndürür. Bir gün sayısını hesaplar. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer year sonlu (finite) değilse, month sonlu (finite) değilse veya date sonlu (finite) değilse, NaN döndür.

  2. y, 𝔽(! ToIntegerOrInfinity(year)) olsun.

  3. m, 𝔽(! ToIntegerOrInfinity(month)) olsun.

  4. dt, 𝔽(! ToIntegerOrInfinity(date)) olsun.

  5. ym, y + 𝔽(floor((m) / 12)) olsun.

  6. Eğer ym sonlu (finite) değilse, NaN döndür.

  7. mn, 𝔽((m) modulo 12) olsun.

  8. YearFromTime(tv) değeri ym, MonthFromTime(tv) değeri mn ve DateFromTime(tv) değeri 1𝔽 olacak şekilde sonlu (finite) bir tv zaman değeri bul; ancak bu mümkün değilse (herhangi bir argümanın aralık dışında olması nedeniyle), NaN döndür.

  9. Day(tv) + dt - 1𝔽 döndür.

21.4.1.29 MakeDate ( day, time )

Soyut işlem MakeDate; day (bir Sayı) ve time (bir Sayı) argümanlarını alır ve sonlu (finite) bir Sayı ya da NaN döndürür. Bir milisaniye sayısını hesaplar. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer day sonlu (finite) değilse veya time sonlu (finite) değilse, NaN döndür.

  2. tv, day × msPerDay + time olsun.

  3. Eğer tv sonlu (finite) değilse, NaN döndür.

  4. tv döndür.

21.4.1.30 MakeFullYear ( year )

Soyut işlem MakeFullYear, year (bir Sayı) argümanını alır ve bir tam sayı Sayı (integral Number) ya da NaN döndürür. 0 ile 99 arasındaki kapalı aralıkta (inclusive interval) yer alan herhangi bir değeri 1900'ün başından itibaren geçen yıl sayısı olarak yorumlayarak, year'ın tam sayı (integer) kısmı ile ilişkili tam yılı döndürür. Artık Miladi takvimle (proleptic Gregorian calendar) uyum için “tam yıl (full year)”, 0 yılından (M.Ö. 1) bu yana geçen tamamlanmış yılların işaretli sayısı olarak tanımlanır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer year; NaN, +∞𝔽 veya -∞𝔽 değerlerinden biri ise, NaN döndür.

  2. truncated, ! ToIntegerOrInfinity(year) olsun.

  3. Eğer truncated, 0 ile 99 arasındaki kapalı aralıkta (inclusive interval) ise, 1900𝔽 + 𝔽(truncated) döndür.

  4. 𝔽(truncated) döndür.

21.4.1.31 TimeClip ( time )

Soyut işlem TimeClip, time (bir Sayı) argümanını alır ve bir zaman değeri döndürür. Bir milisaniye sayısını hesaplar. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer time sonlu (finite) değilse, NaN döndür.

  2. Eğer abs((time)) > 8,64 × 1015 ise, NaN döndür.

  3. 𝔽(! ToIntegerOrInfinity(time)) döndür.

21.4.1.32 Tarih Saat Dize Biçimi (Date Time String Format)

ECMAScript, ISO 8601 takvim tarihi genişletilmiş biçiminin basitleştirilmesine dayanan, tarih-saatler için bir dize değişim biçimi tanımlar. Biçim aşağıdaki gibidir: YYYY-MM-DDTHH:mm:ss.sssZ

Bileşenler aşağıdaki gibidir:

YYYY artık Miladi takvimdeki (proleptic Gregorian calendar) yıl olarak 0000 ile 9999 arasındaki dört ondalık basamaktır ya da "+" veya "-" işaretini takip eden altı ondalık basamaklı bir genişletilmiş yıldır.
- "-" (tire) dize içinde aynen iki kez yer alır.
MM yılın ayı olarak 01 (Ocak) ile 12 (Aralık) arasındaki iki ondalık basamaktır.
DD ayın günü olarak 01 ile 31 arasındaki iki ondalık basamaktır.
T "T" dize içinde aynen yer alır ve saat bileşeninin başlangıcını gösterir.
HH gece yarısından bu yana geçen tamamlanmış saat sayısı olarak 00 ile 24 arasındaki iki ondalık basamaktır.
: ":" (iki nokta üst üste) dize içinde aynen iki kez yer alır.
mm saatin başlangıcından bu yana geçen tamamlanmış dakika sayısı olarak 00 ile 59 arasındaki iki ondalık basamaktır.
ss dakikanın başlangıcından bu yana geçen tamamlanmış saniye sayısı olarak 00 ile 59 arasındaki iki ondalık basamaktır.
. "." (nokta) dize içinde aynen yer alır.
sss saniyenin başlangıcından bu yana geçen tamamlanmış milisaniye sayısı olarak üç ondalık basamaktır.
Z "Z" (farksız UTC için) olarak veya yerel saatin UTC'den sırasıyla ileride veya geride olduğunu belirtmek üzere bir HH:mm zaman ifadesinin (yerel saati belirtmek için kullanılan zaman dilimi farkı dize biçiminin bir alt kümesi) takip ettiği "+" veya "-" işaretlerinden biri olarak belirtilen UTC farkı gösterimidir.

Bu biçim sadece tarih içeren formları içerir:

YYYY
YYYY-MM
YYYY-MM-DD

Ayrıca, yukarıdaki sadece tarih içeren formlardan birinin hemen ardından gelen ve isteğe bağlı bir UTC farkı gösterimi eklenmiş aşağıdaki saat formlarından oluşan “tarih-saat” formlarını da içerir:

THH:mm
THH:mm:ss
THH:mm:ss.sss

Sınırların dışında veya uygun olmayan bileşenler içeren bir dize, bu biçimin geçerli bir örneği değildir.

21.4.1.32.1 Genişletilmiş Yıllar (Expanded Years)

1 Ocak 1970'ten (21.4.1.1) ileriye veya geriye doğru yaklaşık 273.790 yıllık tam zaman değeri aralığını kapsamak, 0'dan önceki veya 9999'dan sonraki yılların temsil edilmesini gerektirir. ISO 8601, yıl gösteriminin genişletilmesine izin verir, ancak yalnızca bilgi değişimindeki tarafların karşılıklı anlaşmasıyla. Basitleştirilmiş ECMAScript biçiminde, bu tür genişletilmiş bir yıl gösterimi 6 basamaklı olmalı ve her zaman bir + veya - işaretiyle başlamalıdır. 0 yılı pozitif kabul edilir ve önüne + işareti konmalıdır. 0 yılının -000000 olarak gösterilmesi geçersizdir. Bir zaman değeri aralığının dışındaki zaman anlarını temsil eden genişletilmiş yıllara sahip Tarih Saat Dize Biçimi ile eşleşen dizeler, Date.parse tarafından tanınamaz olarak kabul edilir ve bu işlevin, uygulamaya özel davranışlara veya sezgisellere başvurmadan NaN döndürmesine neden olur.

21.4.1.33 Zaman Dilimi Farkı Dize Biçimi (Time Zone Offset String Format)

ECMAScript, ISO 8601'den türetilen, UTC farkları için bir dize değişim biçimi tanımlar. Biçim aşağıdaki dilbilgisi ile açıklanmıştır.

Sözdizimi (Syntax)

UTCOffset UTCOffset ::: ASCIISign Hour ASCIISign Hour HourSubcomponents[+Extended] ASCIISign Hour HourSubcomponents[~Extended]

ASCIISign ASCIISign ::: şundan biri: + -

Hour Hour ::: 0 DecimalDigit 1 DecimalDigit 20 21 22 23

HourSubcomponents HourSubcomponents[Extended] ::: TimeSeparator[?Extended] MinuteSecond TimeSeparator[?Extended] MinuteSecond TimeSeparator[?Extended] MinuteSecond TemporalDecimalFractionopt

TimeSeparator TimeSeparator[Extended] ::: [+Extended] : [~Extended] [empty]

MinuteSecond MinuteSecond ::: 0 DecimalDigit 1 DecimalDigit 2 DecimalDigit 3 DecimalDigit 4 DecimalDigit 5 DecimalDigit

TemporalDecimalFraction TemporalDecimalFraction ::: TemporalDecimalSeparator DecimalDigit TemporalDecimalSeparator DecimalDigit DecimalDigit TemporalDecimalSeparator DecimalDigit DecimalDigit DecimalDigit TemporalDecimalSeparator DecimalDigit DecimalDigit DecimalDigit DecimalDigit TemporalDecimalSeparator DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit TemporalDecimalSeparator DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit TemporalDecimalSeparator DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit TemporalDecimalSeparator DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit TemporalDecimalSeparator DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit DecimalDigit

TemporalDecimalSeparator TemporalDecimalSeparator ::: şundan biri: . ,

21.4.1.33.1 IsTimeZoneOffsetString ( offsetString )

Soyut işlem IsTimeZoneOffsetString, offsetString (bir Dizgi) argümanını alır ve bir Boolean döndürür. Döndürülen değer, offsetString değerinin UTCOffset tarafından tanımlanan dilbilgisine uygun olup olmadığını belirtir. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. parseResult, ParseText(offsetString, UTCOffset) olsun.

  2. Eğer parseResult hatalardan oluşan bir Liste (List) ise, false döndür.

  3. true döndür.

21.4.1.33.2 ParseTimeZoneOffsetString ( offsetString )

Soyut işlem ParseTimeZoneOffsetString, offsetString (bir Dizgi) argümanını alır ve bir tam sayı (integer) döndürür. Döndürülen değer, offsetString Dizgisine karşılık gelen, nanosaniye cinsinden UTC farkıdır. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. parseResult, ParseText(offsetString, UTCOffset) olsun.

  2. İddia et (Assert): parseResult, hatalardan oluşan bir Liste (List) değildir.

  3. İddia et (Assert): parseResult, bir ASCIISign Ayrıştırma Düğümü (Parse Node) içerir.

  4. parsedSign, parseResult içinde yer alan ASCIISign Ayrıştırma Düğümü (Parse Node) tarafından eşleşen kaynak metin olsun.

  5. Eğer parsedSign, tek kod noktası U+002D (HYPHEN-MINUS) ise, o halde

    1. sign, -1 olsun.
  6. Aksi takdirde,

    1. sign, 1 olsun.
  7. NOT (NOTE): Ayrıştırılan değerlerin her birinin yeterince kısa bir ondalık basamak dizisi olacağı garanti edildiğinden, aşağıdaki StringToNumber uygulamaları hassasiyet kaybına yol açmaz.

  8. İddia et (Assert): parseResult, bir Hour Ayrıştırma Düğümü (Parse Node) içerir.

  9. parsedHours, parseResult içinde yer alan Hour Ayrıştırma Düğümü (Parse Node) by source text matched by olsun.

  10. hours, (StringToNumber(CodePointsToString(parsedHours))) olsun.

  11. Eğer parseResult, bir MinuteSecond Ayrıştırma Düğümü (Parse Node) içermiyorsa, o halde

    1. minutes, 0 olsun.
  12. Aksi takdirde,

    1. parsedMinutes, parseResult içindeki ilk MinuteSecond Ayrıştırma Düğümü (Parse Node) tarafından eşleşen kaynak metin olsun.

    2. minutes, (StringToNumber(CodePointsToString(parsedMinutes))) olsun.

  13. Eğer parseResult, iki adet MinuteSecond Ayrıştırma Düğümü (Parse Node) içermiyorsa, o halde

    1. seconds, 0 olsun.
  14. Aksi takdirde,

    1. parsedSeconds, parseResult içindeki ikinci MinuteSecond Ayrıştırma Düğümü (Parse Node) tarafından eşleşen kaynak metin olsun.

    2. seconds, (StringToNumber(CodePointsToString(parsedSeconds))) olsun.

  15. Eğer parseResult, bir TemporalDecimalFraction Ayrıştırma Düğümü (Parse Node) içermiyorsa, o halde

    1. nanoseconds, 0 olsun.
  16. Aksi takdirde,

    1. parsedFraction, parseResult içindeki TemporalDecimalFraction Ayrıştırma Düğümü (Parse Node) tarafından eşleşen kaynak metin olsun.

    2. fraction, CodePointsToString(parsedFraction) ile "000000000" değerlerinin dizgi birleşimi (string-concatenation) olsun.

    3. nanosecondsString, fraction'ın 1'den 10'a kadar olan alt dizgisi (substring) olsun.

    4. nanoseconds, (StringToNumber(nanosecondsString)) olsun.

  17. Return sign × (((hours × 60 + minutes) × 60 + seconds) × 109 + nanoseconds).

21.4.2 Date Yapıcısı (The Date Constructor)

Date yapıcısı (constructor):

  • %Date% nesnesidir.

  • küresel nesnenin (global object) "Date" özelliğinin başlangıç değeridir.

  • bir yapıcı (constructor) olarak çağrıldığında yeni bir Date nesnesi oluşturur ve başlatır.

  • bir yapıcı olarak çağrılmak yerine bir işlev olarak çağrıldığında geçerli saati (UTC) temsil eden bir Dizgi döndürür.

  • argümanlarının sayısına ve türlerine göre davranışı farklılık gösteren bir işlevdir.

  • bir sınıf tanımının extends tümcesinin değeri olarak kullanılabilir. Belirtilen Date davranışını miras almayı amaçlayan alt sınıf yapıcıları (constructors), alt sınıf örneğini bir [[DateValue]] dahili yuvası (internal slot) ile oluşturmak ve başlatmak için Date yapıcısına (constructor) yapılacak bir super çağrısı içermelidir.

21.4.2.1 Date ( ...values )

Bu işlev çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer NewTarget undefined ise, o halde

    1. now, geçerli saati belirleyen (UTC) zaman değeri olsun.

    2. ToDateString(now) döndür.

  2. numberOfArgs, values listesindeki öğelerin sayısı olsun.

  3. Eğer numberOfArgs = 0 ise, o halde

    1. dv, geçerli saati belirleyen (UTC) zaman değeri olsun.
  4. Aksi takdirde, eğer numberOfArgs = 1 ise, o halde

    1. value, values[0] olsun.

    2. Eğer value bir Nesne ise (is an Object) ve value nesnesinin bir [[DateValue]] dahili yuvası (internal slot) varsa, o halde

      1. tv, value.[[DateValue]] olsun.
    3. Aksi takdirde,

      1. v, ? ToPrimitive(value) olsun.

      2. Eğer v bir Dizgi ise (is a String), o halde

         1. [İddia et (Assert)](06_sec-notational-conventions.md#assert): Bir sonraki adım asla bir [ani tamamlanma (abrupt completion)](07_sec-ecmascript-data-types-and-values.md#sec-completion-record-specification-type) döndürmez, çünkü *v* [bir Dizgidir (is a String)](07_sec-ecmascript-data-types-and-values.md#sec-ecmascript-language-types-string-type).
        
         2. *tv*, *v*'nin tıpkı `parse` yönteminde ([21.4.3.2](#sec-date.parse)) olduğu gibi bir tarih olarak ayrıştırılmasının sonucu olsun.
      3. Aksi takdirde,

         1. *tv*, ? [ToNumber](08_sec-abstract-operations.md#sec-tonumber)(*v*) olsun.
    4. dv, TimeClip(tv) olsun.

  5. Aksi takdirde,

    1. İddia et (Assert): numberOfArgs ≥ 2'dir.

    2. y, ? ToNumber(values[0]) olsun.

    3. m, ? ToNumber(values[1]) olsun.

    4. Eğer numberOfArgs > 2 ise, dt, ? ToNumber(values[2]) olsun; aksi takdirde dt, 1𝔽 olsun.

    5. Eğer numberOfArgs > 3 ise, h, ? ToNumber(values[3]) olsun; aksi takdirde h, +0𝔽 olsun.

    6. Eğer numberOfArgs > 4 ise, min, ? ToNumber(values[4]) olsun; aksi takdirde min, +0𝔽 olsun.

    7. Eğer numberOfArgs > 5 ise, s, ? ToNumber(values[5]) olsun; aksi takdirde s, +0𝔽 olsun.

    8. Eğer numberOfArgs > 6 ise, milli, ? ToNumber(values[6]) olsun; aksi takdirde milli, +0𝔽 olsun.

    9. yr, MakeFullYear(y) olsun.

    10. finalDate, MakeDate(MakeDay(yr, m, dt), MakeTime(h, min, s, milli)) olsun.

    11. dv, TimeClip(UTC(finalDate)) olsun.

  6. obj, ? OrdinaryCreateFromConstructor(NewTarget, "%Date.prototype%", « [[DateValue]] ») olsun.

  7. obj.[[DateValue]] dahili yuvasının değerini dv olarak ayarla.

  8. obj döndür.

21.4.3 Date Yapıcısının Özellikleri (Properties of the Date Constructor)

Date yapıcısı (constructor):

  • değeri %Function.prototype% olan bir [[Prototype]] dahili yuvasına (internal slot) sahiptir.

  • değeri 7𝔽 olan bir "length" özelliğine sahiptir.

  • aşağıdaki özelliklere sahiptir:

21.4.3.1 Date.now ( )

Bu işlev, kendisine yapılan çağrının gerçekleştiği anın UTC tarih ve saatini gösteren zaman değerini döndürür.

21.4.3.2 Date.parse ( string )

Bu işlev, argümanına ToString işlecini uygular. Eğer ToString işlemi bir ani tamamlanma (abrupt completion) ile sonuçlanırsa, Tamamlanma Kaydı (Completion Record) derhal döndürülür. Aksi takdirde, bu işlev ortaya çıkan Dizgiyi bir tarih ve saat olarak yorumlar; tarih ve saate karşılık gelen UTC zaman değerini bir Sayı olarak döndürür. Dizgi, içeriğine bağlı olarak yerel saat, UTC saati veya başka bir zaman dilimindeki saat olarak yorumlanabilir. İşlev öncelikle Dizgiyi genişletilmiş yıllar da dahil olmak üzere Tarih Saat Dize Biçiminde (21.4.1.32) açıklanan biçime göre ayrıştırmaya çalışır. Eğer Dizgi bu biçime uymuyorsa, işlev uygulamaya özel sezgisellere veya uygulamaya özel tarih biçimlerine başvurabilir. Tanınmayan veya sınırların dışında biçim öğesi değerleri içeren dizeler, bu işlevin NaN döndürmesine neden olur.

Eğer Dizgi Tarih Saat Dize Biçimine uygunsa, eksik biçim öğelerinin yerini yedek değerler alır. MM veya DD bileşenleri eksik olduğunda "01" kullanılır. HH, mm veya ss bileşenleri eksik olduğunda "00" kullanılır. sss bileşeni eksik olduğunda "000" kullanılır. UTC farkı gösterimi eksik olduğunda, yalnızca tarih içeren formlar bir UTC saati olarak, tarih-saat formları ise yerel saat olarak yorumlanır.

Eğer x, belirli bir ECMAScript uygulaması içinde milisaniye miktarı sıfır olan herhangi bir Date nesnesi ise, başvurulan tüm özellikler başlangıç değerlerine sahip olmak kaydıyla aşağıdaki ifadelerin tümü o uygulamada aynı sayısal değeri üretmelidir:

x.valueOf()
Date.parse(x.toString())
Date.parse(x.toUTCString())
Date.parse(x.toISOString())

Bununla birlikte,

Date.parse(x.toLocaleString())

ifadesinin önceki üç ifadeyle aynı Sayı değerini üretmesi zorunlu değildir ve genel olarak, bu işlev tarafından üretilen değer, Tarih Saat Dize Biçimine (21.4.1.32) uymayan ve o uygulamada toString veya toUTCString yöntemiyle üretilemeyecek herhangi bir Dizgi değeri verildiğinde uygulama tarafından tanımlanır (implementation-defined).

21.4.3.3 Date.prototype

Date.prototype özelliğinin başlangıç değeri Date prototip nesnesidir (Date prototype object).

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: false } özniteliklerine sahiptir.

21.4.3.4 Date.UTC ( year [ , month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] ] )

Bu işlev çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. y, ? ToNumber(year) olsun.

  2. Eğer month mevcutsa, m, ? ToNumber(month) olsun; aksi takdirde m, +0𝔽 olsun.

  3. Eğer date mevcutsa, dt, ? ToNumber(date) olsun; aksi takdirde dt, 1𝔽 olsun.

  4. Eğer hours mevcutsa, h, ? ToNumber(hours) olsun; aksi takdirde h, +0𝔽 olsun.

  5. Eğer minutes mevcutsa, min, ? ToNumber(minutes) olsun; aksi takdirde min, +0𝔽 olsun.

  6. Eğer seconds mevcutsa, s, ? ToNumber(seconds) olsun; aksi takdirde s, +0𝔽 olsun.

  7. Eğer ms mevcutsa, milli, ? ToNumber(ms) olsun; aksi takdirde milli, +0𝔽 olsun.

  8. yr, MakeFullYear(y) olsun.

  9. TimeClip(MakeDate(MakeDay(yr, m, dt), MakeTime(h, min, s, milli))) döndür.

Bu işlevin "length" özelliği 7𝔽'dir.

21.4.4 Date Prototip Nesnesinin Özellikleri (Properties of the Date Prototype Object)

Date prototip nesnesi (Date prototype object):

Açıkça aksi tanımlanmadıkça, aşağıda tanımlanan Date prototip nesnesinin yöntemleri genel (generic) değildir ve bunlara geçirilen this değeri, bir zaman değerine göre başlatılmış bir [[DateValue]] dahili yuvasına sahip bir nesne olmalıdır.

21.4.4.1 Date.prototype.constructor

Date.prototype.constructor özelliğinin başlangıç değeri %Date% nesnesidir.

21.4.4.2 Date.prototype.getDate ( )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. Eğer tv NaN ise, NaN döndür.

  5. DateFromTime(LocalTime(tv)) döndür.

21.4.4.3 Date.prototype.getDay ( )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. Eğer tv NaN ise, NaN döndür.

  5. WeekDay(LocalTime(tv)) döndür.

21.4.4.4 Date.prototype.getFullYear ( )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. Eğer tv NaN ise, NaN döndür.

  5. YearFromTime(LocalTime(tv)) döndür.

21.4.4.5 Date.prototype.getHours ( )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. Eğer tv NaN ise, NaN döndür.

  5. HourFromTime(LocalTime(tv)) döndür.

21.4.4.6 Date.prototype.getMilliseconds ( )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. Eğer tv NaN ise, NaN döndür.

  5. msFromTime(LocalTime(tv)) döndür.

21.4.4.7 Date.prototype.getMinutes ( )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. Eğer tv NaN ise, NaN döndür.

  5. MinFromTime(LocalTime(tv)) döndür.

21.4.4.8 Date.prototype.getMonth ( )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. Eğer tv NaN ise, NaN döndür.

  5. MonthFromTime(LocalTime(tv)) döndür.

21.4.4.9 Date.prototype.getSeconds ( )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. Eğer tv NaN ise, NaN döndür.

  5. SecFromTime(LocalTime(tv)) döndür.

21.4.4.10 Date.prototype.getTime ( )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. dateObj.[[DateValue]] değerini döndür.

21.4.4.11 Date.prototype.getTimezoneOffset ( )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. Eğer tv NaN ise, NaN döndür.

  5. (tv - LocalTime(tv)) / msPerMinute değerini döndür.

21.4.4.12 Date.prototype.getUTCDate ( )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. Eğer tv NaN ise, NaN döndür.

  5. DateFromTime(tv) döndür.

21.4.4.13 Date.prototype.getUTCDay ( )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. Eğer tv NaN ise, NaN döndür.

  5. WeekDay(tv) döndür.

21.4.4.14 Date.prototype.getUTCFullYear ( )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. Eğer tv NaN ise, NaN döndür.

  5. YearFromTime(tv) döndür.

21.4.4.15 Date.prototype.getUTCHours ( )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. Eğer tv NaN ise, NaN döndür.

  5. HourFromTime(tv) döndür.

21.4.4.16 Date.prototype.getUTCMilliseconds ( )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. Eğer tv NaN ise, NaN döndür.

  5. msFromTime(tv) döndür.

21.4.4.17 Date.prototype.getUTCMinutes ( )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. Eğer tv NaN ise, NaN döndür.

  5. MinFromTime(tv) döndür.

21.4.4.18 Date.prototype.getUTCMonth ( )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. Eğer tv NaN ise, NaN döndür.

  5. MonthFromTime(tv) döndür.

21.4.4.19 Date.prototype.getUTCSeconds ( )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. Eğer tv NaN ise, NaN döndür.

  5. SecFromTime(tv) döndür.

21.4.4.20 Date.prototype.setDate ( date )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. dt, ? ToNumber(date) olsun.

  5. Eğer tv NaN ise, NaN döndür.

  6. tv değerini LocalTime(tv) olarak ayarla.

  7. newDate, MakeDate(MakeDay(YearFromTime(tv), MonthFromTime(tv), dt), TimeWithinDay(tv)) olsun.

  8. u, TimeClip(UTC(newDate)) olsun.

  9. dateObj.[[DateValue]] dahili yuvasının değerini u olarak ayarla.

  10. u döndür.

21.4.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. y, ? ToNumber(year) olsun.

  5. Eğer tv NaN ise, tv değerini +0𝔽 olarak ayarla; aksi takdirde tv değerini LocalTime(tv) olarak ayarla.

  6. Eğer month mevcutsa, m, ? ToNumber(month) olsun; aksi takdirde m, MonthFromTime(tv) olsun.

  7. Eğer date mevcutsa, dt, ? ToNumber(date) olsun; aksi takdirde dt, DateFromTime(tv) olsun.

  8. newDate, MakeDate(MakeDay(y, m, dt), TimeWithinDay(tv)) olsun.

  9. u, TimeClip(UTC(newDate)) olsun.

  10. dateObj.[[DateValue]] dahili yuvasının değerini u olarak ayarla.

  11. u döndür.

Bu yöntemin "length" özelliği 3𝔽'tür.

21.4.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. h, ? ToNumber(hour) olsun.

  5. Eğer min mevcutsa, m, ? ToNumber(min) olsun.

  6. Eğer sec mevcutsa, s, ? ToNumber(sec) olsun.

  7. Eğer ms mevcutsa, milli, ? ToNumber(ms) olsun.

  8. Eğer tv NaN ise, NaN döndür.

  9. tv değerini LocalTime(tv) olarak ayarla.

  10. Eğer min mevcut değilse, m, MinFromTime(tv) olsun.

  11. Eğer sec mevcut değilse, s, SecFromTime(tv) olsun.

  12. Eğer ms mevcut değilse, milli, msFromTime(tv) olsun.

  13. date, MakeDate(Day(tv), MakeTime(h, m, s, milli)) olsun.

  14. u, TimeClip(UTC(date)) olsun.

  15. dateObj.[[DateValue]] dahili yuvasının değerini u olarak ayarla.

  16. u döndür.

Bu yöntemin "length" özelliği 4𝔽'tür.

21.4.4.23 Date.prototype.setMilliseconds ( ms )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. ms değerini ? ToNumber(ms) olarak ayarla.

  5. Eğer tv NaN ise, NaN döndür.

  6. tv değerini LocalTime(tv) olarak ayarla.

  7. time, MakeTime(HourFromTime(tv), MinFromTime(tv), SecFromTime(tv), ms) olsun.

  8. u, TimeClip(UTC(MakeDate(Day(tv), time))) olsun.

  9. dateObj.[[DateValue]] dahili yuvasının değerini u olarak ayarla.

  10. u döndür.

21.4.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. m, ? ToNumber(min) olsun.

  5. Eğer sec mevcutsa, s, ? ToNumber(sec) olsun.

  6. Eğer ms mevcutsa, milli, ? ToNumber(ms) olsun.

  7. Eğer tv NaN ise, NaN döndür.

  8. tv değerini LocalTime(tv) olarak ayarla.

  9. Eğer sec mevcut değilse, s, SecFromTime(tv) olsun.

  10. Eğer ms mevcut değilse, milli, msFromTime(tv) olsun.

  11. date, MakeDate(Day(tv), MakeTime(HourFromTime(tv), m, s, milli)) olsun.

  12. u, TimeClip(UTC(date)) olsun.

  13. dateObj.[[DateValue]] dahili yuvasının değerini u olarak ayarla.

  14. u döndür.

Bu yöntemin "length" özelliği 3𝔽'tür.

21.4.4.25 Date.prototype.setMonth ( month [ , date ] )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. m, ? ToNumber(month) olsun.

  5. Eğer date mevcutsa, dt, ? ToNumber(date) olsun.

  6. Eğer tv NaN ise, NaN döndür.

  7. tv değerini LocalTime(tv) olarak ayarla.

  8. Eğer date mevcut değilse, dt, DateFromTime(tv) olsun.

  9. newDate, MakeDate(MakeDay(YearFromTime(tv), m, dt), TimeWithinDay(tv)) olsun.

  10. u, TimeClip(UTC(newDate)) olsun.

  11. dateObj.[[DateValue]] dahili yuvasının değerini u olarak ayarla.

  12. u döndür.

Bu yöntemin "length" özelliği 2𝔽'dir.

21.4.4.26 Date.prototype.setSeconds ( sec [ , ms ] )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. s, ? ToNumber(sec) olsun.

  5. Eğer ms mevcutsa, milli, ? ToNumber(ms) olsun.

  6. Eğer tv NaN ise, NaN döndür.

  7. tv değerini LocalTime(tv) olarak ayarla.

  8. Eğer ms mevcut değilse, milli, msFromTime(tv) olsun.

  9. date, MakeDate(Day(tv), MakeTime(HourFromTime(tv), MinFromTime(tv), s, milli)) olsun.

  10. u, TimeClip(UTC(date)) olsun.

  11. dateObj.[[DateValue]] dahili yuvasının değerini u olarak ayarla.

  12. u döndür.

Bu yöntemin "length" özelliği 2𝔽'dir.

21.4.4.27 Date.prototype.setTime ( time )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. t, ? ToNumber(time) olsun.

  4. v, TimeClip(t) olsun.

  5. dateObj.[[DateValue]] dahili yuvasının değerini v olarak ayarla.

  6. v döndür.

21.4.4.28 Date.prototype.setUTCDate ( date )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. dt, ? ToNumber(date) olsun.

  5. Eğer tv NaN ise, NaN döndür.

  6. newDate, MakeDate(MakeDay(YearFromTime(tv), MonthFromTime(tv), dt), TimeWithinDay(tv)) olsun.

  7. v, TimeClip(newDate) olsun.

  8. dateObj.[[DateValue]] dahili yuvasının değerini v olarak ayarla.

  9. v döndür.

21.4.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. Eğer tv NaN ise, tv değerini +0𝔽 olarak ayarla.

  5. y, ? ToNumber(year) olsun.

  6. Eğer month mevcutsa, m, ? ToNumber(month) olsun; aksi takdirde m, MonthFromTime(tv) olsun.

  7. Eğer date mevcutsa, dt, ? ToNumber(date) olsun; aksi takdirde dt, DateFromTime(tv) olsun.

  8. newDate, MakeDate(MakeDay(y, m, dt), TimeWithinDay(tv)) olsun.

  9. v, TimeClip(newDate) olsun.

  10. dateObj.[[DateValue]] dahili yuvasının değerini v olarak ayarla.

  11. v döndür.

Bu yöntemin "length" özelliği 3𝔽'tür.

21.4.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. h, ? ToNumber(hour) olsun.

  5. Eğer min mevcutsa, m, ? ToNumber(min) olsun.

  6. Eğer sec mevcutsa, s, ? ToNumber(sec) olsun.

  7. Eğer ms mevcutsa, milli, ? ToNumber(ms) olsun.

  8. Eğer tv NaN ise, NaN döndür.

  9. Eğer min mevcut değilse, m, MinFromTime(tv) olsun.

  10. Eğer sec mevcut değilse, s, SecFromTime(tv) olsun.

  11. Eğer ms mevcut değilse, milli, msFromTime(tv) olsun.

  12. date, MakeDate(Day(tv), MakeTime(h, m, s, milli)) olsun.

  13. v, TimeClip(date) olsun.

  14. dateObj.[[DateValue]] dahili yuvasının değerini v olarak ayarla.

  15. v döndür.

Bu yöntemin "length" özelliği 4𝔽'tür.

21.4.4.31 Date.prototype.setUTCMilliseconds ( ms )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. ms değerini ? ToNumber(ms) olarak ayarla.

  5. Eğer tv NaN ise, NaN döndür.

  6. time, MakeTime(HourFromTime(tv), MinFromTime(tv), SecFromTime(tv), ms) olsun.

  7. v, TimeClip(MakeDate(Day(tv), time)) olsun.

  8. dateObj.[[DateValue]] dahili yuvasının değerini v olarak ayarla.

  9. v döndür.

21.4.4.32 Date.prototype.setUTCMinutes ( min [ , sec [ , ms ] ] )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. m, ? ToNumber(min) olsun.

  5. Eğer sec mevcutsa, s, ? ToNumber(sec) olsun.

  6. Eğer ms mevcutsa, milli, ? ToNumber(ms) olsun.

  7. Eğer tv NaN ise, NaN döndür.

  8. Eğer sec mevcut değilse, s, SecFromTime(tv) olsun.

  9. Eğer ms mevcut değilse, milli, msFromTime(tv) olsun.

  10. date, MakeDate(Day(tv), MakeTime(HourFromTime(tv), m, s, milli)) olsun.

  11. v, TimeClip(date) olsun.

  12. dateObj.[[DateValue]] dahili yuvasının değerini v olarak ayarla.

  13. v döndür.

Bu yöntemin "length" özelliği 3𝔽'dir.

21.4.4.33 Date.prototype.setUTCMonth ( month [ , date ] )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. m, ? ToNumber(month) olsun.

  5. Eğer date mevcutsa, dt, ? ToNumber(date) olsun.

  6. Eğer tv NaN ise, NaN döndür.

  7. Eğer date mevcut değilse, dt, DateFromTime(tv) olsun.

  8. newDate, MakeDate(MakeDay(YearFromTime(tv), m, dt), TimeWithinDay(tv)) olsun.

  9. v, TimeClip(newDate) olsun.

  10. dateObj.[[DateValue]] dahili yuvasının değerini v olarak ayarla.

  11. v döndür.

Bu yöntemin "length" özelliği 2𝔽'dir.

21.4.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. s, ? ToNumber(sec) olsun.

  5. Eğer ms mevcutsa, milli, ? ToNumber(ms) olsun.

  6. Eğer tv NaN ise, NaN döndür.

  7. Eğer ms mevcut değilse, milli, msFromTime(tv) olsun.

  8. date, MakeDate(Day(tv), MakeTime(HourFromTime(tv), MinFromTime(tv), s, milli)) olsun.

  9. v, TimeClip(date) olsun.

  10. dateObj.[[DateValue]] dahili yuvasının değerini v olarak ayarla.

  11. v döndür.

Bu yöntemin "length" özelliği 2𝔽'dir.

21.4.4.35 Date.prototype.toDateString ( )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. Eğer tv NaN ise, "Invalid Date" döndür.

  5. t, LocalTime(tv) olsun.

  6. Return DateString(t).

21.4.4.36 Date.prototype.toISOString ( )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. Eğer tv NaN ise, bir RangeError istisnası fırlat.

  5. İddia et (Assert): tv, bir tam sayı Sayıdır (integral Number).

  6. Eğer tv, Tarih Saat Dize Biçiminde temsil edilemeyen bir yıla karşılık geliyorsa, bir RangeError istisnası fırlat.

  7. tv değerinin, tüm biçim öğelerini ve UTC farkı gösterimi "Z"yi içerecek şekilde, UTC zaman ölçeğindeki Tarih Saat Dize Biçiminde bir Dizgi temsilini döndür.

21.4.4.37 Date.prototype.toJSON ( key )

Bu yöntem, JSON.stringify (25.5.4) tarafından kullanılmak üzere bir Date nesnesinin Dizgi temsilini sağlar.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, ? ToObject(this değeri) olsun.

  2. tv, ? ToPrimitive(obj, number) olsun.

  3. Eğer tv bir Sayı ise (is a Number) ve tv sonlu (finite) değilse, null döndür.

  4. ? Invoke(obj, "toISOString") döndür.

21.4.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )

ECMA-402 Uluslararasılaştırma API'sini içeren bir ECMAScript uygulaması, bu yöntemi ECMA-402 belirtiminde açıklandığı şekilde uygulamalıdır. Bir ECMAScript uygulaması ECMA-402 API'sini içermiyorsa, bu yöntemin aşağıdaki belirtimi kullanılır:

Bu yöntem bir Dizgi (String) değeri döndürür. Dizginin içeriği uygulama tarafından tanımlanır (implementation-defined), ancak Date nesnesinin geçerli zaman dilimindeki “tarih” kısmını, barındırıcı ortamın (host environment) geçerli yerel ayarının (locale) kurallarına uygun, anlaşılır ve insan tarafından okunabilir bir biçimde temsil etmesi amaçlanır.

Bu yöntemin isteğe bağlı parametrelerinin anlamı ECMA-402 belirtiminde tanımlanmıştır; ECMA-402 desteği içermeyen uygulamalar bu parametre konumlarını başka hiçbir şey için kullanmamalıdır.

21.4.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )

ECMA-402 Uluslararasılaştırma API'sini içeren bir ECMAScript uygulaması, bu yöntemi ECMA-402 belirtiminde açıklandığı şekilde uygulamalıdır. Bir ECMAScript uygulaması ECMA-402 API'sini içermiyorsa, bu yöntemin aşağıdaki belirtimi kullanılır:

Bu yöntem bir Dizgi (String) değeri döndürür. Dizginin içeriği uygulama tarafından tanımlanır (implementation-defined), ancak Date nesnesini geçerli zaman diliminde, barındırıcı ortamın (host environment) geçerli yerel ayarının (locale) kurallarına uygun, anlaşılır ve insan tarafından okunabilir bir biçimde temsil etmesi amaçlanır.

Bu yöntemin isteğe bağlı parametrelerinin anlamı ECMA-402 belirtiminde tanımlanmıştır; ECMA-402 desteği içermeyen uygulamalar bu parametre konumlarını başka hiçbir şey için kullanmamalıdır.

21.4.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )

ECMA-402 Uluslararasılaştırma API'sini içeren bir ECMAScript uygulaması, bu yöntemi ECMA-402 belirtiminde açıklandığı şekilde uygulamalıdır. Bir ECMAScript uygulaması ECMA-402 API'sini içermiyorsa, bu yöntemin aşağıdaki belirtimi kullanılır:

Bu yöntem bir Dizgi (String) değeri döndürür. Dizginin içeriği uygulama tarafından tanımlanır (implementation-defined), ancak Date nesnesinin geçerli zaman dilimindeki “saat” kısmını, barındırıcı ortamın (host environment) geçerli yerel ayarının (locale) kurallarına uygun, anlaşılır ve insan tarafından okunabilir bir biçimde temsil etmesi amaçlanır.

Bu yöntemin isteğe bağlı parametrelerinin anlamı ECMA-402 belirtiminde tanımlanmıştır; ECMA-402 desteği içermeyen uygulamalar bu parametre konumlarını başka hiçbir şey için kullanmamalıdır.

21.4.4.41 Date.prototype.toString ( )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. ToDateString(tv) döndür.

21.4.4.41.1 TimeString ( tv )

Soyut işlem TimeString, tv (bir Sayı, ancak NaN değil) argümanını alır ve bir Dizgi döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. hour, ToZeroPaddedDecimalString((HourFromTime(tv)), 2) olsun.

  2. minute, ToZeroPaddedDecimalString((MinFromTime(tv)), 2) olsun.

  3. second, ToZeroPaddedDecimalString((SecFromTime(tv)), 2) olsun.

  4. hour, ":", minute, ":", second, 0x0020 kod birimi (SPACE) ve "GMT" değerlerinin dizgi birleşimini (string-concatenation) döndür.

21.4.4.41.2 DateString ( tv )

Soyut işlem DateString, tv (bir Sayı, ancak NaN değil) argümanını alır ve bir Dizgi döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. weekday, WeekDay(tv) Sayısı ile Tablo 60 içindeki girişin Adı (Name) olsun.

  2. month, MonthFromTime(tv) Sayısı ile Tablo 61 içindeki girişin Adı (Name) olsun.

  3. day, ToZeroPaddedDecimalString((DateFromTime(tv)), 2) olsun.

  4. yv, YearFromTime(tv) olsun.

  5. Eğer yv +0𝔽 ise veya yv > +0𝔽 ise, yearSign boş Dizgi olsun; aksi takdirde yearSign "-" olsun.

  6. paddedYear, ToZeroPaddedDecimalString(abs((yv)), 4) olsun.

  7. weekday, 0x0020 kod birimi (SPACE), month, 0x0020 kod birimi (SPACE), day, 0x0020 kod birimi (SPACE), yearSign ve paddedYear değerlerinin dizgi birleşimini (string-concatenation) döndür.

Tablo 60: Haftanın günlerinin adları

Sayı Adı
+0𝔽 "Sun"
1𝔽 "Mon"
2𝔽 "Tue"
3𝔽 "Wed"
4𝔽 "Thu"
5𝔽 "Fri"
6𝔽 "Sat"

Tablo 61: Yılın aylarının adları

Sayı Adı
+0𝔽 "Jan"
1𝔽 "Feb"
2𝔽 "Mar"
3𝔽 "Apr"
4𝔽 "May"
5𝔽 "Jun"
6𝔽 "Jul"
7𝔽 "Aug"
8𝔽 "Sep"
9𝔽 "Oct"
10𝔽 "Nov"
11𝔽 "Dec"
21.4.4.41.3 TimeZoneString ( tv )

Soyut işlem TimeZoneString, tv (bir tam sayı Sayı (integral Number)) argümanını alır ve bir Dizgi döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. systemTimeZoneIdentifier, SystemTimeZoneIdentifier() olsun.

  2. Eğer IsTimeZoneOffsetString(systemTimeZoneIdentifier) true ise, o halde

    1. offsetNs, ParseTimeZoneOffsetString(systemTimeZoneIdentifier) olsun.
  3. Aksi takdirde,

    1. offsetNs, GetNamedTimeZoneOffsetNanoseconds(systemTimeZoneIdentifier, ((tv) × 106)) olsun.
  4. offset, 𝔽(truncate(offsetNs / 106)) olsun.

  5. Eğer offset +0𝔽 ise veya offset > +0𝔽 ise, o halde

    1. offsetSign "+" olsun.

    2. absOffset, offset olsun.

  6. Aksi takdirde,

    1. offsetSign "-" olsun.

    2. absOffset, -offset olsun.

  7. offsetMin, ToZeroPaddedDecimalString((MinFromTime(absOffset)), 2) olsun.

  8. offsetHour, ToZeroPaddedDecimalString((HourFromTime(absOffset)), 2) olsun.

  9. tzName, boş Dizgi ya da 0x0020 kod birimi (SPACE), 0x0028 kod birimi (LEFT PARENTHESIS), uygulama tarafından tanımlanmış (implementation-defined) bir zaman dilimi adı ve 0x0029 kod birimi (RIGHT PARENTHESIS) değerlerinin dizgi birleşimi (string-concatenation) olan ve uygulama tarafından tanımlanmış (implementation-defined) bir dizgi olsun.

  10. offsetSign, offsetHour, offsetMin ve tzName değerlerinin dizgi birleşimini (string-concatenation) döndür.

21.4.4.41.4 ToDateString ( tv )

Soyut işlem ToDateString, tv (bir tam sayı Sayı (integral Number) veya NaN) argümanını alır ve bir Dizgi döndürür. Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. Eğer tv NaN ise, "Invalid Date" döndür.

  2. localTime, LocalTime(tv) olsun.

  3. DateString(localTime), 0x0020 kod birimi (SPACE), TimeString(localTime) ve TimeZoneString(tv) değerlerinin dizgi birleşimi (string-concatenation) döndür.

21.4.4.42 Date.prototype.toTimeString ( )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. Eğer tv NaN ise, "Invalid Date" döndür.

  5. localTime, LocalTime(tv) olsun.

  6. TimeString(localTime) ile TimeZoneString(tv) değerlerinin dizgi birleşimi (string-concatenation) döndür.

21.4.4.43 Date.prototype.toUTCString ( )

Bu yöntem, this değerine karşılık gelen zaman anını temsil eden bir Dizgi (String) değeri döndürür. Dizginin biçimi, ECMAScript Date nesneleri tarafından desteklenen tüm zaman aralığını destekleyecek şekilde genelleştirilmiş, RFC 7231'deki HTTP-date biçimine dayanır.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. tv, dateObj.[[DateValue]] olsun.

  4. Eğer tv NaN ise, "Invalid Date" döndür.

  5. weekday, WeekDay(tv) Sayısı ile Tablo 60 içindeki girişin Adı (Name) olsun.

  6. month, MonthFromTime(tv) Sayısı ile Tablo 61 içindeki girişin Adı (Name) olsun.

  7. day, ToZeroPaddedDecimalString((DateFromTime(tv)), 2) olsun.

  8. yv, YearFromTime(tv) olsun.

  9. Eğer yv +0𝔽 ise veya yv > +0𝔽 ise, yearSign boş Dizgi olsun; aksi takdirde yearSign "-" olsun.

  10. paddedYear, ToZeroPaddedDecimalString(abs((yv)), 4) olsun.

  11. weekday, ",", 0x0020 kod birimi (SPACE), day, 0x0020 kod birimi (SPACE), month, 0x0020 kod birimi (SPACE), yearSign, paddedYear, 0x0020 kod birimi (SPACE) ve TimeString(tv) değerlerinin dizgi birleşimi (string-concatenation) döndür.

21.4.4.44 Date.prototype.valueOf ( )

Bu yöntem çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. dateObj, this değeri olsun.

  2. ? RequireInternalSlot(dateObj, [[DateValue]]) işlemini gerçekleştir.

  3. dateObj.[[DateValue]] değerini döndür.

21.4.4.45 Date.prototype [ %Symbol.toPrimitive% ] ( hint )

Bu yöntem, bir Date nesnesini ilkel (primitive) bir değere dönüştürmek için ECMAScript dili işleçleri tarafından çağrılır. hint için izin verilen değerler "default", "number" ve "string"dir. Tarih nesneleri, yerleşik ECMAScript nesneleri arasında "default" değerini "string" değerine eşdeğer olarak kabul etmesi bakımından benzersizdir; diğer tüm yerleşik ECMAScript nesneleri "default" değerini "number" değerine eşdeğer olarak kabul eder.

Çağrıldığında aşağıdaki adımları gerçekleştirir:

  1. obj, this değeri olsun.

  2. Eğer obj bir Nesne değilse (is not an Object), bir TypeError istisnası fırlat.

  3. Eğer hint; "string" veya "default" değerlerinden biri ise, o halde

    1. tryFirst, string olsun.
  4. Aksi takdirde, eğer hint "number" ise, o halde

    1. tryFirst, number olsun.
  5. Aksi takdirde,

    1. Bir TypeError istisnası fırlat.
  6. ? OrdinaryToPrimitive(obj, tryFirst) sonucunu döndür.

Bu özellik { [[Writable]]: false, [[Enumerable]]: false, [[Configurable]]: true } özniteliklerine sahiptir.

Bu yöntemin "name" özelliğinin değeri "[Symbol.toPrimitive]"tir.

21.4.5 Date Örneklerinin Özellikleri (Properties of Date Instances)

Date örnekleri, özellikleri Date prototip nesnesinden (Date prototype object) miras alan sıradan nesnelerdir (ordinary objects). Date örnekleri ayrıca bir [[DateValue]] dahili yuvasına (internal slot) sahiptir. [[DateValue]] dahili yuvası, bu Date nesnesi tarafından temsil edilen zaman değeridir.