Artık Miladi takvimde (proleptic Gregorian calendar), artık yıllar tam olarak hem 4'e bölünebilen hem de 400'e bölünebilen ya da 100'e bölünemeyen yıllardır.
Artık Miladi takvimin 400 yıllık döngüsü 97 artık yıl içerir. Bu, yılda ortalama 365,2425 gün verir ki bu da 31.556.952.000 milisaniyedir. Bu nedenle, bir Sayının milisaniye hassasiyetiyle tam olarak temsil edebileceği maksimum aralık, 1970'e göre yaklaşık -285.426 ile 285.426 yıldır. Bu bölümde belirtildiği gibi bir zaman değeri tarafından desteklenen daha küçük aralık ise, 1970'e göre yaklaşık -273.790 ile 273.790 yıldır.
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:
𝔽 (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:
𝔽 (ℝ (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:
ry , ℝ (y ) olsun.
Eğer (ry modulo 400) = 0 ise, 366𝔽 döndür.
Eğer (ry modulo 100) = 0 ise, 365𝔽 döndür.
Eğer (ry modulo 4) = 0 ise, 366𝔽 döndür.
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:
ry , ℝ (y ) olsun.
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.
numberYears1 , (ry - 1970) olsun.
numberYears4 , floor ((ry - 1969) / 4) olsun.
numberYears100 , floor ((ry - 1901) / 100) olsun.
numberYears400 , floor ((ry - 1601) / 400) olsun.
𝔽 (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:
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:
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:
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:
Eğer DaysInYear (YearFromTime (tv )) değeri 366𝔽 ise, 1𝔽 döndür.
+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:
inLeapYear , InLeapYear (tv ) olsun.
dayWithinYear , DayWithinYear (tv ) olsun.
Eğer dayWithinYear < 31𝔽 ise, +0𝔽 döndür.
Eğer dayWithinYear < 59𝔽 + inLeapYear ise, 1𝔽 döndür.
Eğer dayWithinYear < 90𝔽 + inLeapYear ise, 2𝔽 döndür.
Eğer dayWithinYear < 120𝔽 + inLeapYear ise, 3𝔽 döndür.
Eğer dayWithinYear < 151𝔽 + inLeapYear ise, 4𝔽 döndür.
Eğer dayWithinYear < 181𝔽 + inLeapYear ise, 5𝔽 döndür.
Eğer dayWithinYear < 212𝔽 + inLeapYear ise, 6𝔽 döndür.
Eğer dayWithinYear < 243𝔽 + inLeapYear ise, 7𝔽 döndür.
Eğer dayWithinYear < 273𝔽 + inLeapYear ise, 8𝔽 döndür.
Eğer dayWithinYear < 304𝔽 + inLeapYear ise, 9𝔽 döndür.
Eğer dayWithinYear < 334𝔽 + inLeapYear ise, 10𝔽 döndür.
İddia et (Assert) : dayWithinYear < 365𝔽 + inLeapYear .
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:
inLeapYear , InLeapYear (tv ) olsun.
dayWithinYear , DayWithinYear (tv ) olsun.
month , MonthFromTime (tv ) olsun.
Eğer month +0𝔽 ise, dayWithinYear + 1𝔽 döndür.
Eğer month 1𝔽 ise, dayWithinYear - 30𝔽 döndür.
Eğer month 2𝔽 ise, dayWithinYear - 58𝔽 - inLeapYear döndür.
Eğer month 3𝔽 ise, dayWithinYear - 89𝔽 - inLeapYear döndür.
Eğer month 4𝔽 ise, dayWithinYear - 119𝔽 - inLeapYear döndür.
Eğer month 5𝔽 ise, dayWithinYear - 150𝔽 - inLeapYear döndür.
Eğer month 6𝔽 ise, dayWithinYear - 180𝔽 - inLeapYear döndür.
Eğer month 7𝔽 ise, dayWithinYear - 211𝔽 - inLeapYear döndür.
Eğer month 8𝔽 ise, dayWithinYear - 242𝔽 - inLeapYear döndür.
Eğer month 9𝔽 ise, dayWithinYear - 272𝔽 - inLeapYear döndür.
Eğer month 10𝔽 ise, dayWithinYear - 303𝔽 - inLeapYear döndür.
İddia et (Assert) : month 11𝔽 'dir.
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:
𝔽 (ℝ (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:
𝔽 (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:
𝔽 (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:
𝔽 (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:
𝔽 (ℝ (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:
date , MakeDay (𝔽 (year ), 𝔽 (month - 1), 𝔽 (day )) olsun.
time , MakeTime (𝔽 (hour ), 𝔽 (minute ), 𝔽 (second ), 𝔽 (millisecond )) olsun.
ms , MakeDate (date , time ) olsun.
İddia et (Assert) : ms , bir tam sayı Sayıdır (integral Number) .
ℤ (ℝ (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:
İddia et (Assert) : timeZoneIdentifier , "UTC"dir.
epochNanoseconds , GetUTCEpochNanoseconds (year , month , day , hour , minute , second , millisecond , microsecond , nanosecond ) olsun.
« epochNanoseconds » döndür.
NOT
Zaman dilimi duyarlı (time zone aware) uygulamaların (ve diğer tüm uygulamalar için tavsiye edilenin) IANA Zaman Dilimi Veritabanının https://www.iana.org/time-zones/ zaman dilimi bilgilerini kullanması gerekir.
America/New_York zaman diliminde 5 Kasım 2017 saat 01:30 iki kez tekrarlanır; bu nedenle GetNamedTimeZoneEpochNanoseconds("America/New_York", 2017, 11, 5, 1, 30, 0, 0, 0, 0) çağrısı, ilk öğesi 05:30 UTC'yi (UTC farkı -04:00 olan ABD Doğu Yaz Saati ile 01:30'a karşılık gelir) ve ikinci öğesi 06:30 UTC'yi (UTC farkı -05:00 olan ABD Doğu Standart Saati ile 01:30'a karşılık gelir) temsil eden 2 uzunluğunda bir Liste (List) döndürür.
America/New_York zaman diliminde 12 Mart 2017 saat 02:30 mevcut değildir; bu nedenle GetNamedTimeZoneEpochNanoseconds("America/New_York", 2017, 3, 12, 2, 30, 0, 0, 0, 0) çağrısı boş bir Liste (List) döndürü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:
İddia et (Assert) : timeZoneIdentifier , "UTC"dir.
0 döndür.
NOT
Zaman dilimi farkı değerleri pozitif veya negatif olabilir.
# 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ı
NOT
Eğer [[Identifier]] bir birincil zaman dilimi tanımlayıcısı ise, o halde [[Identifier]] ile [[PrimaryIdentifier]] aynıdır.
# 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:
Eğer uygulama herhangi bir zaman dilimi için yerel siyasi kuralları içermiyorsa, o halde
« { [[Identifier]] : "UTC", [[PrimaryIdentifier]] : "UTC" } Zaman Dilimi Tanımlayıcı Kaydını (Time Zone Identifier Record) » döndür.
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.
result , yeni ve boş bir Liste (List) olsun.
identifiers listesindeki her bir identifier öğesi için sırayla şunları yap:
primary , identifier olsun.
Eğer bu uygulamada identifier bir birincil olmayan zaman dilimi tanımlayıcısı ise ve identifier "UTC" değilse, o halde
primary değerini, identifier ile ilişkili olan birincil zaman dilimi tanımlayıcısı olarak ayarla.
NOT (NOTE) : Bir uygulamanın, birincil zaman dilimi tanımlayıcısını elde etmek için identifier 'ı yinelemeli olarak çözümlemesi gerekebilir.
record , { [[Identifier]] : identifier , [[PrimaryIdentifier]] : primary } Zaman Dilimi Tanımlayıcı Kaydı (Time Zone Identifier Record) olsun.
record değerini result listesine ekle.
İ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.
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:
Eğer uygulama yalnızca UTC zaman dilimini destekliyorsa, "UTC" döndür.
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.
systemTimeZoneString döndür.
NOT
Uygulamaların Date nesnesinin yöntemlerinde yaygın olarak sağladığı işlevsellik düzeyini sağlamak için, eğer varsa SystemTimeZoneIdentifier'ın barındırıcı ortamın (host environment) zaman dilimi ayarına karşılık gelen bir IANA zaman dilimi adı döndürmesi önerilir. GetNamedTimeZoneEpochNanoseconds ve GetNamedTimeZoneOffsetNanoseconds , eğer varsa o zaman dilimindeki standart saat ve yaz saati uygulamalarına ilişkin yerel siyasi kuralları yansıtmalıdır.
Örneğin, eğer barındırıcı ortam (host environment) kullanıcının zaman dilimi olarak ABD Doğu Saati'ni seçtiği bir sistemdeki tarayıcı ise, SystemTimeZoneIdentifier "America/New_York" döndürü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:
systemTimeZoneIdentifier , SystemTimeZoneIdentifier () olsun.
Eğer IsTimeZoneOffsetString (systemTimeZoneIdentifier ) true ise, o halde
offsetNs , ParseTimeZoneOffsetString (systemTimeZoneIdentifier ) olsun.
Aksi takdirde,
offsetNs , GetNamedTimeZoneOffsetNanoseconds (systemTimeZoneIdentifier , ℤ (ℝ (tv ) × 106 )) olsun.
offsetMs , truncate (offsetNs / 106 ) olsun.
tv + 𝔽 (offsetMs ) döndür.