حياة في بضعة أسطر
22 DEC 1984 · BORN
22 ديسمبر 1984 هو تاريخ ميلادي. ومنه يبدأ حساب الأيام التي عشتها.
30 JUL 2022 · DUBAI
30 يوليو 2022 هو بداية حياتي في دبي. ولهذا الجزء من حياتي عدّاد خاص.
NOW
تاريخ اليوم حسب توقيت دبي، UTC+4. يتغيّر مع تغيّر اليوم في التقويم.
LIFE · DAY
عدد الأيام التقويمية الكاملة منذ الميلاد. يوم الميلاد هو نقطة البداية، اليوم صفر.
DUBAI · DAY
عدد الأيام منذ الانتقال إلى دبي.
OF LIFE · DUBAI
الأيام التي قضيتها في دبي مقسومة على جميع الأيام التي عشتها. هكذا يظهر الانتقال ضمن مقياس الحياة كلها.
الشيفرة وراء هذه الأرقام
تحسب هذه الدالة أيام الحياة والأيام في دبي ونسبتها من العمر. وهي نفسها تشغّل العدّاد أعلاه. يمكنك نسخ هذا المثال الجاهز لصفحتك واستبدال التاريخين بتاريخيك. يُحدَّد اليوم التقويمي وفق توقيت دبي.
<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 فللفيديوهات التي تحتاج مساحة أكبر من الستوري. تابعوني حيث يناسبكم، ولنبقَ على تواصل