Temporal Duration
Temporal.Duration obyekti
Temporal.Duration obyekti vaqt davomiyligini ifodalaydi.
Misol: 7 kun va 1 soat.
Temporal.Duration obyekti quyidagi xususiyatlarni o‘z ichiga oladi:
years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds va nanoseconds.
Misol
// Create a Duration object
const duration = Temporal.Duration.from({days:7, hours:2});
Natija
P7DT2H
O‘zingiz sinab ko‘ring »
ISO 8601 davomiylik kodlari
ISO 8601 davomiyligi vaqt uzunligini ifodalaydi.
U ±P (Period) dan boshlanadigan standart formatdan, undan keyin nYnMnDTnHnMnS tuzilmasidan foydalanadi.
Sintaksis
(o‘qish qulay bo‘lishi uchun bo‘sh joylar qo‘shilgan)
+P nY nM nW nD T nH nM nS
U yillar nY, oylar nM, haftalar nW, kunlar nD hamda soatlar nH, daqiqalar nM va soniyalar nS oldidan qo‘yiladigan T ni o‘z ichiga oladi.
Misol
Uch yil, olti oy, to‘rt kun, o‘n ikki soat, o‘ttiz daqiqa va besh soniya.
P3Y6M4DT12H30M5S
Qo‘shimcha misollar
| Duration | Kod |
|---|---|
| 1 kun | P1D |
| 45 daqiqa | PT45M |
| 1 yil, 2 oy, 3 kun | P1Y2M3D |
| 4 soat, 5 daqiqa, 6 soniya | PT4H5M6S |
| 2.5 soat | PT2H30M |
| 5 hafta | P5W |
Batafsil bilib oling:
Temporal.Duration’ni qanday yaratish
Davomiylik bir necha xil usullarda yaratilishi mumkin:
| Nimadan | Kod |
|---|---|
| Konstruktor yordamida | new Temporal.Duration() |
| Obyektdan | Temporal.Duration.from() |
| ISO stringidan | Temporal.Duration.from() |
new yordamida Duration yaratish
Temporal.Duration obyektini new konstruktori va butun son parametrlari yordamida yaratishingiz mumkin.
Misol
7 kun va 2 soatlik davomiylik yarating.
// Create a Duration object
const duration = new Temporal.Duration(0, 0, 0, 7, 2);
O‘zingiz sinab ko‘ring »
Parametrlar quyidagi tartibda bo‘lishi kerak:
- Yillar
- Oylar
- Haftalar
- Kunlar
- Soatlar
- Daqiqalar
- Soniyalar
- Millisekundlar
- Mikrosekundlar
- Nanosekundlar
Obyekt yordamida Duration yaratish
Davomiylik obyektini {days:7, hours: 2} kabi obyekt literal parametri bilan from() metodi yordamida yaratishingiz mumkin:
Misol
// Create a Duration object
const duration = Temporal.Duration.from({days:7, hours:2});
O‘zingiz sinab ko‘ring »
Obyekt literal JavaScript obyektlarini yaratishning eng keng tarqalgan usuli hisoblanadi.
Siz obyektni uning mazmunini jingalak qavslar { } ichiga olingan kalit: qiymat juftlari sifatida tom ma’noda yozish orqali yaratasiz.
ISO stringi yordamida Duration yaratish
Parametr sifatida ISO davomiyligi stringi bilan from() metodi yordamida Duration obyektini yaratishingiz mumkin.
Misol
// Create a Duration
const duration = Temporal.Duration.from("P7DT2H");
O‘zingiz sinab ko‘ring »
Batafsil bilib oling:
Temporal.Duration xususiyatlari
Temporal.Duration obyekti vaqt ma’lumotlarining 12 xususiyatiga ega.
Misol
//Create a Duration
const duration = new Temporal.Duration(0, 0, 0, 7, 2, 0);
// List the Properties
let text =
"blank: " + duration.blank + " " +
"sign: " + duration.sign + " " +
"years: " + duration.years + " " +
"months: " + duration.months + " " +
"weeks: " + duration.weeks + " " +
"days: " + duration.days + " " +
"hour: " + duration.hours + " " +
"minutes: " + duration.minutes + " " +
"seconds: " + duration.seconds + " " +
"milliseconds: " + duration.milliseconds + " " +
"microseconds: " + duration.microseconds + " " +
"nanoseconds: " + duration.nanoseconds;
O‘zingiz sinab ko‘ring »
with() metodi
with() metodi muayyan xususiyatlari (vaqt birliklari) almashtirilgan yangi davomiylikni qaytaradi:
Misol
// Create a Duration
const duration = Temporal.Duration.from({hours:10, minutes:30});
// Create a new duration with the minutes changed to 45
const newDuration = duration.with({minutes:45});
O‘zingiz sinab ko‘ring »
Xavfsiz sana arifmetikasi
Duration obyekti sana va vaqt arifmetikasini xavfsiz va aniq bajarishni osonlashtiradi, DST (yozgi vaqt) va vaqt mintaqasi o‘zgarishlari bilan bog‘liq muammolarning oldini oladi.
Davomiylik obyekti vaqtni turli birliklarda, jumladan, yillar, oylar, haftalar, kunlar, soatlar, daqiqalar, soniyalar, millisekundlar, mikrosekundlar va nanosekundlarda boshqarishi mumkin.
Duration obyekti sana arifmetikasini millisekundlarni qo‘lda hisoblashga qaraganda aniqroq, o‘qilishi osonroq va xavfsizroq qiladi.
Duration add() metodi
add() metodi davomiylik qo‘shilgan yangi davomiylikni qaytaradi.
add() metodi asl davomiylikni o‘zgartirmaydi.
Misol
// Create a Duration
const d1 = Temporal.Duration.from({ hours:2, minutes:30 });
// Add a Duration
const d2 = d1.add({ hours:1, minutes:30 });
O‘zingiz sinab ko‘ring »
Duration subtract() metodi
subtract() metodi davomiylik ayirilgan yangi davomiylikni qaytaradi.
subtract() metodi asl davomiylikni o‘zgartirmaydi.
Misol
// Create a Duration
const d1 = Temporal.Duration.from({ hours:2, minutes:30 });
// Subtract a Duration
const d2 = d1.subtract({ hours:1, minutes:30 });
O‘zingiz sinab ko‘ring »
O‘zgarmaslik (immutability)
Temporal obyektlari o‘zgarmas, ya’ni add() yoki subtract() kabi amallar asl nusxani o‘zgartirmasdan yangi Temporal.Duration nusxasini qaytaradi.
Temporal add() va subtract()
Barcha Temporal obyektlari o‘zining add() metodiga ega:
- duration.add(duration)
- instant.add(duration)
- plaindate.add(duration)
- plaintime.add(duration)
- plainyearmonth.add(duration)
- plainmonthday.add(duration)
- plaindatetime.add(duration)
- zoneddatetime.add(duration)
Barcha Temporal obyektlari o‘zining subtract() metodiga ega:
- duration.subtract(duration)
- instant.subtract(duration)
- plaindate.subtract(duration)
- plaintime.subtract(duration)
- plainyearmonth.subtract(duration)
- plainmonthday.subtract(duration)
- plaindatetime.subtract(duration)
- zoneddatetime.subtract(duration)
Batafsil bilib oling:
Compare() metodi
Bir xil davomiylikning turli ko‘rinishlarini qayta ishlash murakkab bo‘lgani sababli Temporal.Duration obyektida equals() metodi mavjud emas.
Buning o‘rniga tenglik statik Temporal.Duration.compare() metodi yordamida tekshiriladi.
Bu usul birinchi muddat qisqaroq bo‘lsa -1 ni, bir xil bo‘lsa 0 ni va uzoqroq bo‘lsa 1 ni qaytaradi.
Misollar
// Create two Durations
const d1 = Temporal.Duration.from({ hours:1, minutes:30 });
const d2 = Temporal.Duration.from({ minutes:90 });
// Compare the Durations
let result = Temporal.Duration.compare(d1, d2);
O‘zingiz sinab ko‘ring »
// Create two Durations
const d1 = Temporal.Duration.from({ hours:1, minutes:30 });
const d2 = Temporal.Duration.from({ hours:1, minutes:30 });
// Compare the Durations
let result = Temporal.Duration.compare(d1, d2);
O‘zingiz sinab ko‘ring »
E’tibor bering, ikkala misol ham tenglik uchun 0 ni qaytaradi.
90 daqiqa 1 soat 30 daqiqa bilan bir xil davomiylikdir.
Barcha Temporal obyektlari o‘zining compare() metodiga ega:
- Temporal.Instant.compare(instant1, instant2)
- Temporal.PlainDate.compare(plaindate1, plaindate2)
- Temporal.PlainTime.compare(plaintime1, plaintime2)
- Temporal.PlainYearMonth.compare(plainyearmonth1, plainyearmonth2)
- Temporal.PlainMonthDay.compare(plainmonthday1 plainmonthday2)
- Temporal.PlainDateTime.compare(plaindatetime1,plaindatetime2)
- Temporal.ZonedDateTime.compare(zoneddtatime1, zoneddtatime2)
- Temporal.Duration.compare(duration1, duration2)
Batafsil bilib oling:
Diapazon xatolari
Misol
// Create two Durations
const d1 = Temporal.Duration.from({ days:30 });
const d2 = Temporal.Duration.from({ months: 1 });
// Compare the Durations
let result = Temporal.Duration.compare(d1, d2);
Yuqoridagi kod ishlamaydi va RangeError xatosini chiqaradi, chunki d2 notekis va o‘zgaruvchan uzunlikka ega kalendar birligini (oylarni) o‘z ichiga oladi.
Taqvimdagi aniq boshlanish nuqtasi bo‘lmasa, JavaScript bajarilish muhiti (runtime) taqqoslash uchun "1 oy"da qancha kun borligini aniqlay olmaydi.
Misol uchun, fevral oyidan boshlanadigan 1 oy 28 yoki 29 kun bo‘lishi mumkin, yanvar oyida boshlangan 1 oy esa 31 kun.
equals() metodi yo‘q
Temporal.Duration obyekti equals() metodiga ega emas, chunki davomiylik matematik jihatdan ekvivalent, lekin tuzilishi jihatidan farq qiluvchi bir nechta “muvozanatsiz” usullarda ifodalanishi mumkin.
Masalan, 90 soniya davomiylik mantiqiy jihatdan 1 daqiqa 30 soniyaga teng, lekin ular Temporal.Duration obyektida alohida xossalar to‘plami sifatida saqlanadi.
Muvozanatlanmagan birliklar: Standart holatda Temporal.Duration birliklarni qanday aniqlangan bo‘lsa, aynan shunday saqlaydi. "60 daqiqa" va "1 soat" turli xil ichki tasvirlar bo‘lganligi sababli, standart equals() usuli noaniq bo‘ladi (bir xil xususiyatlar yoki bir xil vaqt uzunligini tekshirish kerakmi?)
O‘zgaruvchan birlik uzunliklari: kunlar, oylar va yillar kabi birliklar qat’iy uzunlikka ega emas. "Oy" taqvim va ma’lumot sanasiga qarab 28, 30 yoki 31 kun bo‘lishi mumkin.
Kontekst zarurati: Kalendar birliklarini (yillar, oylar, haftalar) o‘z ichiga olgan ikkita davomiylikni to‘g‘ri solishtirish uchun siz relativeTo opsiyasini (aniq boshlanish nuqtasini) berishingiz kerak. Bu tayanch nuqtasiz API ikkita kalendarga asoslangan muddat haqiqatda "teng" ekanligini aniqlay olmaydi.
Oddiy equals() metodi o‘rniga TC39 Temporal taklifi ishlab chiquvchilardan Temporal.Duration.compare() statik metodidan foydalanishni talab qiladi.
Duration’dan qachon foydalaniladi
Vaqt qo‘shish yoki ayirish
Yoshni hisoblash
Sanalar orasidagi farqlarni hisoblash
Vaqt oraliqlarini hisoblash (soatlar, kunlar, oylar)
Temporal.Duration metodlari
| Yaratish | Tavsif |
|---|---|
| from() | Obyekt yoki ISO stringidan yangi Duration obyektini qaytaradi |
| new() | Butun sonli parametrlardan yangi davomiylik obyektini qaytaradi |
| Arifmetika | |
| abs() | Ushbu muddatning mutlaq qiymati bilan yangi muddatni qaytaradi |
| add() | Bu muddatga qo‘shilgan davomiylik bilan yangi muddatni qaytaradi |
| negated() | Bu davomiylikning ishorasi teskarisiga o‘zgartirilgan yangi davomiylikni qaytaradi |
| round() | Bu muddat yaxlitlangan holda yangi muddatni qaytaradi |
| subtract() | Bu muddatdan ayirib tashlangan muddat bilan yangi muddatni qaytaradi |
| Taqqoslash | |
| compare() | Ikki davomiylikni solishtiradi (-1, 0 yoki 1 qaytaradi) |
| Konvertatsiya | |
| with() | Ko‘rsatilgan maydon(lar)i o‘zgartirilgan yangi davomiylikni qaytaradi |
| Formatlash | |
| total() | Berilgan birlikdagi davomiylikni ifodalovchi sonni qaytaradi |
| toJSON() | JSON serializatsiyasi uchun RFC 9557 formatidagi stringni qaytaradi |
| toLocaleString() | Vaqtning tilga sezgir tasvirini qaytaradi |
| toString() | RFC 9557 formatidagi string ko‘rinishini qaytaradi |
| valueOf() | TypeError chiqaradi (Temporal obyektlarining primitivlarga aylantirilishining oldini oladi) |
Temporal.Duration xususiyatlari
| Xususiyat | Tavsif |
|---|---|
| blank | Agar davomiylik nolga teng bo‘lsa, mantiqiy true |
| days | Kunlar butun son sifatida (1-31) |
| hours | Soatlar butun son sifatida (0-23) |
| microseconds | Mikrosekundlar butun son sifatida (0-999) |
| milliseconds | Millisekundlar butun son sifatida (0-999) |
| minutes | Daqiqalar butun son sifatida (0-59) |
| months | Oylar butun son sifatida (1-12) |
| nanoseconds | Nanosekundlar butun son sifatida (0-999) |
| seconds | Soniyalar butun son sifatida (0-59) |
| sign | 1 musbat, -1 manfiy |
| weeks | Haftalar butun son sifatida |
| years | Yillar butun son sifatida |
Barcha Duration xususiyatlarini ko‘rsatish
//Create a Duration
const duration = new Temporal.Duration(0, 0, 0, 7, 2, 0);
// List the Properties
let text =
"blank: " + duration.blank + " " +
"sign: " + duration.sign + " " +
"years: " + duration.years + " " +
"months: " + duration.months + " " +
"weeks: " + duration.weeks + " " +
"days: " + duration.days + " " +
"hour: " + duration.hours + " " +
"minutes: " + duration.minutes + " " +
"seconds: " + duration.seconds + " " +
"milliseconds: " + duration.milliseconds + " " +
"microseconds: " + duration.microseconds + " " +
"nanoseconds: " + duration.nanoseconds;
O‘zingiz sinab ko‘ring »
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
