إلى المحتوى

حياة في بضعة أسطر

22 DEC 1984 · BORN30 JUL 2022 · DUBAI04 NOV 2026 · NOWLIFE · DAY 15,292DUBAI · DAY 1,55810.19% OF LIFE · DUBAI

22 DEC 1984 · BORN

22 ديسمبر 1984 هو تاريخ ميلادي. ومنه يبدأ حساب الأيام التي عشتها.

30 JUL 2022 · DUBAI

30 يوليو 2022 هو بداية حياتي في دبي. ولهذا الجزء من حياتي عدّاد خاص.

NOW

تاريخ اليوم حسب توقيت دبي، UTC+4. يتغيّر مع تغيّر اليوم في التقويم.

LIFE · DAY

عدد الأيام التقويمية الكاملة منذ الميلاد. يوم الميلاد هو نقطة البداية، اليوم صفر.

DUBAI · DAY

عدد الأيام منذ الانتقال إلى دبي.

OF LIFE · DUBAI

الأيام التي قضيتها في دبي مقسومة على جميع الأيام التي عشتها. هكذا يظهر الانتقال ضمن مقياس الحياة كلها.

عرض جميع الأيام

الشيفرة وراء هذه الأرقام

تحسب هذه الدالة أيام الحياة والأيام في دبي ونسبتها من العمر. وهي نفسها تشغّل العدّاد أعلاه. يمكنك نسخ هذا المثال الجاهز لصفحتك واستبدال التاريخين بتاريخيك. يُحدَّد اليوم التقويمي وفق توقيت دبي.

HTML + JavaScript
<output id="life-counter" aria-label="شيفرة العدّاد"></output>
<script>
const lifeCounters = function lifeCounters(now, residency, birth, locale, units) {
	const parts = Object.fromEntries(new Intl.DateTimeFormat("en-CA", {
		timeZone: "Asia/Dubai",
		year: "numeric",
		month: "2-digit",
		day: "2-digit"
	}).formatToParts(now).map((p) => [p.type, p.value]));
	const day = Date.UTC(+parts.year, +parts.month - 1, +parts.day);
	const count = (date) => {
		if (!/^\d{4}-\d{2}-\d{2}$/.test(date || "")) throw new Error("Invalid counter date");
		return Math.floor((day - Date.parse(date + "T00:00:00Z")) / 864e5);
	};
	const dubai = count(residency), life = count(birth);
	if (!Number.isFinite(dubai) || !Number.isFinite(life) || dubai < 0 || life <= 0) throw new Error("Invalid counter range");
	const unit = (n) => units[new Intl.PluralRules(locale).select(n)] || units.other;
	const d = Object.fromEntries(new Intl.DateTimeFormat(locale, {
		timeZone: "Asia/Dubai",
		year: "numeric",
		month: "long",
		day: "numeric"
	}).formatToParts(now).map((p) => [p.type, p.value]));
	return {
		"data-current-date": ["ru", "en"].includes(locale.split("-")[0]) ? `${d.day} ${d.month} ${d.year}` : new Intl.DateTimeFormat(locale, {
			timeZone: "Asia/Dubai",
			dateStyle: "long"
		}).format(now),
		"data-dubai-day-counter": dubai.toLocaleString(locale),
		"data-life-day-counter": life.toLocaleString(locale),
		"data-dubai-day-unit": unit(dubai),
		"data-life-day-unit": unit(life),
		"data-dubai-life-share": (dubai / life * 100).toLocaleString(locale, {
			minimumFractionDigits: 2,
			maximumFractionDigits: 2
		}) + "%"
	};
};

function updateCounter() {
  const counters = lifeCounters(
    new Date(), '2022-07-30', '1984-12-22', 'en-US', {other: 'days'}
  );
  document.getElementById('life-counter').textContent = [
    'LIFE · DAY ' + counters['data-life-day-counter'],
    'DUBAI · DAY ' + counters['data-dubai-day-counter'],
    counters['data-dubai-life-share'] + ' OF LIFE · DUBAI'
  ].join(' / ');
}
updateCounter();
setInterval(updateCounter, 30000);
</script>

@nevsky_alexander

على Instagram، دبي بعيدًا عن صور البطاقات البريدية: العائلة والمدينة والاكتشافات والحياة بين المشاريع. وعلى Threads، أفكار بصوت عالٍ عن التصميم والذكاء الاصطناعي. أما YouTube فللفيديوهات التي تحتاج مساحة أكبر من الستوري. تابعوني حيث يناسبكم، ولنبقَ على تواصل

اشتراك 1 اشتراك 2 اشتراك 3
اشتراك 4 اشتراك 5 اشتراك 6
اجتماع لمدة 15 دقيقة
افتح في Cal.com ↗