تقویم ماهانهٔ قابل چاپ، حسابشده برای صفحه
حساب میکند یک ماه واقعاً چطور روی برگهٔ کاغذ مینشیند: شبکه چند ردیف هفته لازم دارد، روز اول ماه در کدام ستون میافتد، با آن تعداد ردیف کادر هر روز چقدر بزرگ میشود، و شمارهٔ هفتهٔ ISO برای هر تاریخ. نام ماهها و روزهای هفته از دادههای محلی خود مرورگر شما میآید و هر رقم در همین تب محاسبه میشود.
تقویم
وکتوری و با ابعاد میلیمتری، بنابراین هر کادر دقیقاً به اندازهٔ گفتهشده در بالا چاپ میشود. همینجا چاپش کنید تا از عناصر اضافی صفحه بگذرید، یا ذخیرهاش کنید و در هر برنامهای باز کنید.
هر روز و جایی که میافتد
| ۱ | یکشنبه | ۱ | ۷ | ۵ | 2026-02-01 |
| ۲ | دوشنبه | ۲ | ۱ | ۶ | 2026-02-02 |
| ۳ | سهشنبه | ۲ | ۲ | ۶ | 2026-02-03 |
| ۴ | چهارشنبه | ۲ | ۳ | ۶ | 2026-02-04 |
| ۵ | پنجشنبه | ۲ | ۴ | ۶ | 2026-02-05 |
| ۶ | جمعه | ۲ | ۵ | ۶ | 2026-02-06 |
| ۷ | شنبه | ۲ | ۶ | ۶ | 2026-02-07 |
| ۸ | یکشنبه | ۲ | ۷ | ۶ | 2026-02-08 |
| ۹ | دوشنبه | ۳ | ۱ | ۷ | 2026-02-09 |
| ۱۰ | سهشنبه | ۳ | ۲ | ۷ | 2026-02-10 |
| ۱۱ | چهارشنبه | ۳ | ۳ | ۷ | 2026-02-11 |
| ۱۲ | پنجشنبه | ۳ | ۴ | ۷ | 2026-02-12 |
| ۱۳ | جمعه | ۳ | ۵ | ۷ | 2026-02-13 |
| ۱۴ | شنبه | ۳ | ۶ | ۷ | 2026-02-14 |
| ۱۵ | یکشنبه | ۳ | ۷ | ۷ | 2026-02-15 |
| ۱۶ | دوشنبه | ۴ | ۱ | ۸ | 2026-02-16 |
چگونگی کار
این ابزار چه چیزی را محاسبه میکند
تقویم ماهانه چیز ثابتی به نظر میرسد و نیست. همان برگهٔ کاغذ، همان حاشیهها و همان ماه میتواند چهار ردیف دربیاید یا شش ردیف، فقط بسته به اینکه روز اول ماه به کدام روز هفته میافتد و شما هفته را از کدام روز شروع میکنید. آن تعداد ردیف سپس تعیین میکند هر کادر روز چقدر بلند باشد، که تفاوت تقویمی است که میشود در آن نوشت با تقویمی که نمیشود.
این ابزار کل چیدمان را پیش از آنکه چیزی به چاپگر برسد حساب میکند: شبکه چند ردیف لازم دارد، روز اول ماه در کدام ستون مینشیند، چند خانهٔ خالی در دو طرف ماه هست، با آن تعداد ردیف هر کادر چقدر بزرگ میشود، و شمارهٔ هفتهٔ ISO برای هر تاریخ.
روش
دو عدد همهچیز را تعیین میکنند. اولی این است که چند خانهٔ خالی پیش از روز اول میآید، که فاصلهٔ ستون آغازین تا روز هفتهای است که ماه از آن شروع میشود. دومی طول ماه است. آن دو را جمع کنید و تعداد خانههایی را دارید که شبکه باید جا دهد؛ بر هفت تقسیم کنید و به بالا گرد کنید و تعداد ردیفها را دارید.
به همین دلیل فوریهٔ ۲۸ روزه — دقیقاً چهار هفته — اینقدر اغلب باز هم پنج ردیف لازم دارد. فوریه ۲۰۲۶ از یکشنبه شروع میشود و شبکهای که ستون اولش دوشنبه است باید شش خانه را خالی بگذارد تا بتواند روز اول را جا دهد. شش خانهٔ خالی بهعلاوهٔ ۲۸ روز ۳۴ خانه است، که در ۳۵ خانه بیهیچ جای اضافه جا میشود اما در ۲۸ خانه جا نمیشود. ستون اول را به یکشنبه ببرید و خانههای خالی ناپدید میشوند، ماه در چهار ردیف جا میشود و هر کادر روی برگه یکچهارم بلندتر میشود.
هیچ شیء Dateای برای هیچکدام از محاسبات تاریخ استفاده نمیشود، که انتخابی عمدی است، نه سلیقه. Date شیئی وابسته به منطقهٔ زمانی محلی است، و روش رایج پیمودن تقویم با آن — تغییر دادن یک تاریخ با setDate در یک حلقه — همان راهی است که باگهای خطای یکروزهٔ تقویم نوشته میشوند، چون دستگاهی در غرب گرینویچ آن لحظه را در روز قبل نشان میدهد. روز هفته و شمارهٔ هفتهٔ ISO اینجا در عوض از days_from_civil هاوارد هینانت میآیند، که حساب دقیق اعداد صحیح روی تقویم میلادیِ امتدادی است، بیهیچ شاخهٔ سال کبیسه در آن: جابهجا کردن آغاز سال به مارس، فوریه — تنها ماه نامنظم — را به انتها میبرد، جایی که روز اضافهاش چیزی را بعد از خود به هم نمیزند. Date دقیقاً در یک جا ظاهر میشود، بهعنوان آرگومانی که Intl.DateTimeFormat برای ساختن یک نام لازم دارد، و هر قالببند اینجا به UTC ثابت شده است تا منطقهٔ زمانی خود دستگاه نتواند نامی را روی روز اشتباه بیندازد.
شمارههای هفتهٔ ISO توضیح جداگانهای میخواهند، چون تعریفشان شهودی نیست. هفتهها از دوشنبه تا یکشنبهاند و هفتهٔ ۱ هفتهای است که اولین پنجشنبهٔ سال را در بر دارد — بنابراین هر هفته متعلق به سال تقویمیای است که پنجشنبهاش در آن میافتد، و تاریخی نزدیک به آخر دسامبر یا اول ژانویه میتواند شمارهای از سال مجاور داشته باشد. آن هفتهها دو بار شمرده نمیشوند، که اصل قاعده همین است، اما معنایش این است که شمارهٔ هفتهٔ کنار ۱ ژانویه اغلب ۵۲ یا ۵۳ است، نه ۱. تنظیم ستون اول هم بر آنها اثری ندارد: هفتههای ISO بنا به تعریف از دوشنبه شروع میشوند، بنابراین شبکهٔ با شروع یکشنبه شمارههای هفتههایی را نشان میدهد که یک روز پیش از هر ردیف شروع شدهاند.
هندسهٔ صفحه بخش ساده است. ناحیهٔ قابل چاپ، برگه منهای دو برابر حاشیه، منهای فضایی است که بالای شبکه برای عنوان و برچسب روزهای هفته کنار گذاشته شده. عرض را بر هفت ستون تقسیم کنید — هشت اگر ستون شمارهٔ هفته روشن باشد — و ارتفاع باقیمانده را بر تعداد ردیفها. هر طول تا آن تقسیم نهایی بهصورت تعداد صحیحی میکرومتر نگه داشته میشود، بنابراین دو بار کم کردن حاشیه نمیتواند باقیماندهای از ممیز شناور به جا بگذارد.
پیش از ادامهٔ مطلب
فوریه ۲۰۲۶ دقیقاً ۲۸ روز دارد — درست چهار هفته. شبکهای که ستون اولش دوشنبه است چند ردیف لازم دارد؟
پنج. فوریه ۲۰۲۶ از یکشنبه شروع میشود، بنابراین شبکهٔ با شروع دوشنبه باید شش خانه را خالی بگذارد تا بتواند روز اول را جا دهد: ۶ + ۲۸ = ۳۴ خانه، که پنج ردیف هفتتایی لازم دارد. ستون اول را به یکشنبه ببرید و خانههای خالی ناپدید میشوند، ماه در چهار ردیف جا میشود، و هر کادر روی برگه از ۳۲٫۸۰ به ۴۱٫۰۰ میلیمتر بلند میشود — یکچهارم بلندتر، روی کاغذ یکسان، از یک کنترل که شبیه یک ترجیح سلیقهای است.
blanks = (0 for Sunday - 1 for Monday + 7) mod 7 = 6فاصلهٔ ستون آغازین تا روز هفتهای که ماه از آن شروع میشود. «+ ۷» برای این است که باقیماندهٔ تقسیم هرگز عدد منفی نبیند.
cells = 6 + 28 = 34خانههای خالی بهعلاوهٔ طول ماه. این تنها جایی است که آن دو عدد به هم میرسند.
rows = ceil(34 / 7) = 5و یک خانه بعد از ۲۸ام خالی میماند، چون ۵ × ۷ برابر ۳۵ است.
ارتفاع خانه = (210 - 24 - 22) / 5 = 32.80 میلیمترA۴ افقی منهای دو حاشیهٔ ۱۲ میلیمتری و ۲۲ میلیمتر فضای بالای شبکه، تقسیم بر تعداد ردیفها. تا این تقسیم همهچیز بهصورت میکرومتر صحیح نگهداری میشود.
یک نمونه کار شده
فوریه ۲۰۲۶، هفته با شروع دوشنبه، نامها به انگلیسی (بریتانیا)، A۴ افقی، حاشیهٔ ۱۲ میلیمتری و ۲۲ میلیمتر فضای بالای شبکه:
heading February 2026
the 1st falls on Sunday, in column 7
days 28
blank cells 6 before, 1 after
rows 5
printable area 273.00 x 186.00 mm
grid area 273.00 x 164.00 mm (186 less the 22 mm heading)
day box 39.00 x 32.80 mm
ISO weeks 5 through 9
محاسبه را میشود با دست در هر دو جهت بررسی کرد:
| رقم | محاسبه | نتیجه |
|---|---|---|
| خانههای خالی پیش از روز اول | (۰ برای یکشنبه − ۱ برای دوشنبه + ۷) mod ۷ | ۶ |
| خانههای شبکه | ۶ + ۲۸ | ۳۴ |
| ردیفها | ceil(۳۴ ÷ ۷) | ۵ |
| خانههای خالی پس از ۲۸ام | ۵ × ۷ − ۳۴ | ۱ |
| عرض کادر | (۲۹۷ − ۲۴) ÷ ۷ | ۳۹٫۰۰ میلیمتر |
| ارتفاع کادر | (۲۱۰ − ۲۴ − ۲۲) ÷ ۵ | ۳۲٫۸۰ میلیمتر |
هر دو تقسیم اینجا دقیق درمیآیند، که تصادفی از A۴ و این حاشیههاست، نه چیزی که ابزار ترتیب داده باشد.
یک کنترل را تغییر دهید و شکل برگه عوض میشود. با شروع هفته از یکشنبه، همان ماه هیچ خانهٔ خالی پیشین ندارد، در چهار ردیف جا میشود و ارتفاع کادر از ۳۲٫۸۰ به ۴۱٫۰۰ میلیمتر میرسد — یکچهارم بلندتر، روی کاغذ یکسان. اوت ۲۰۲۶ نمونهٔ جهت مخالف است: ۳۱ روز که از شنبه شروع شود پنج خانهٔ خالی بهعلاوهٔ ۳۱ است، یعنی ۳۶ خانه و شش ردیف، و کادرها به ۲۷٫۳۳ میلیمتر پایین میآیند.
اینها همان اعدادی هستند که در فایل آزمون این ابزار تثبیت شدهاند، بنابراین اگر فرمول بدون تغییر همزمان این صفحه عوض شود، ساخت شکست میخورد. حساب روز هفته و هفتهٔ ISO آنجا به روش دومی هم بررسی میشود، در برابر پیادهسازیهای جداگانهٔ مبتنی بر Date، برای هر ماه از ۱۶۰۰ تا ۲۴۰۰ و برای تکتک روزهای هر ماه در یک چرخهٔ کامل کبیسه.
کاری که انجام نمیدهد
تقویم را رسم نمیکند. هندسه و جدول کامل تاریخها را به شما میدهد — هر روز با ردیف، ستون، نام روز هفته و شمارهٔ هفتهٔ ISO آن — که بهصورت CSV دانلود میشود، و این برای چیدن دقیق برگه در یک برنامهٔ طراحی، یک صفحهگسترده یا یک شیوهنامه کافی است. صفحهٔ آمادهای برای فرستادن به چاپگر نیست.
همچنین فقط یک تقویم را مدل میکند، نه چیزهای زیادی را که مردم روی تقویم میگذارند. تعطیلات رسمی، فازهای ماه، شمارهگذاری هفتههای ماه، روزهای ماههای قبل و بعد که کمرنگ در خانههای خالی بیایند، و ستونهای باریکتر آخر هفته یا شمارهٔ هفته که تقویم چاپی اغلب دارد، هیچکدام در آن نیست. همهٔ کادرها هماندازهاند، که تنها چیدمانی است که میتوان دقیقاً بیانش کرد، نه با قراردادی که هیچکس بر سرش توافق ندارد.
و چیزی دربارهٔ چاپگر شما نمیداند. اندازههای کاغذ اندازههای برشخوردهاند، بنابراین حاشیهٔ سختافزاریای که چاپگر رومیزی فیزیکی نمیتواند به آن برسد کسر نمیشود، و مقیاسی هم که پنجرهٔ چاپ اعمال میکند، مگر خاموشش کنید، کسر نمیشود. هر دو آنسوی این صفحهاند، و هر دو بیسروصدا برگهٔ چاپشده را با تکتک میلیمترهای بالا ناسازگار میکنند.
چیزی را هم برایتان نمیشمارد. تعداد روزهای کاری یک بازه — بهجای شبکهای برای نوشتن آنها — حسابی روی دو تاریخ است، نه یک مسئلهٔ چیدمان.
فرمول
daysInMonth = برای فوریه در سال کبیسه 29 و در غیر این صورت 28؛
برای آوریل، ژوئن، سپتامبر و نوامبر 30؛
برای ماههای دیگر 31.
سال کبیسه = year mod 4 = 0 و (year mod 100 != 0 یا year mod 400 = 0)
firstColumn = برای شروع یکشنبه 0، دوشنبه 1 و شنبه 6
leadingBlanks = (weekdayOfThe1st - firstColumn + 7) mod 7
cells = leadingBlanks + daysInMonth
rows = ceil(cells / 7)
trailingBlanks = rows x 7 - cells
برای روز d:
offset = leadingBlanks + d - 1
row = floor(offset / 7) + 1
column = (offset mod 7) + 1
هفتههای ISO 8601 از دوشنبه تا یکشنبهاند و هفتهٔ 1 نخستین پنجشنبهٔ سال را دارد.
isoWeekday = دوشنبه 1 … یکشنبه 7
thursday = dayNumber + (4 - isoWeekday)
weekYear = سال میلادی آن پنجشنبه
isoWeek = floor((thursday - اول ژانویهٔ weekYear) / 7) + 1
با ستون شمارهٔ هفته 8 ستون و بدون آن 7 ستون وجود دارد.
همهٔ طولها تا آخرین تقسیم بهصورت میکرومتر صحیح نگهداری میشوند.
فرضها
- تاریخها برای هر سال از ۱۵۸۳ به بعد در تقویم میلادیِ امتدادی (پرولپتیک) محاسبه میشوند، و به همین دلیل این اولین سال ارائهشده است. بریتانیا و مستعمراتش تا سپتامبر ۱۷۵۲ تقویم ژولینی را نگه داشتند، بنابراین برای ماهی پیش از آن، این ابزار با تقویمی که مردم آن زمان واقعاً استفاده میکردند اختلاف دارد — ده روز در ۱۵۸۳ و یازده روز تا ۱۷۵۲.
- روز شروع هفته صریحاً انتخاب میشود، نه اینکه از زبان استنباط شود. CLDR برای هر سرزمین روز اول هفته را ثبت میکند، اما کلیدش منطقه است نه زبان، بنابراین «فرانسوی» بهتنهایی به این پرسش پاسخ نمیدهد — و این تنظیم تعداد ردیفها را تغییر میدهد، که حدس اشتباه آن را بیش از یک خطای ظاهری میکند.
- شمارههای هفتهٔ ISO همیشه هفتههای دوشنبه تا یکشنبه را میشمارند، شبکه از هر روزی که شروع شود. بنابراین تقویمی با شروع یکشنبه، کنار ردیف اولش، شمارهٔ هفتهای را نشان میدهد که آن هفته یک روز پیش از آن ردیف شروع شده است.
- همهٔ ستونها همعرض و همهٔ ردیفها همارتفاعاند، از جمله ستون شمارهٔ هفته وقتی روشن است. تقویمهای چاپی اغلب ستون شمارهٔ هفته یا آخر هفته را باریکتر میکنند و هیچکدام از این قراردادها آنقدر استاندارد نیست که بشود بر اساسش محاسبه کرد.
- اندازههای کاغذ اندازههای برشخوردهاند. حاشیهٔ سختافزاری خود چاپگر، که معمولاً ۴ تا ۶ میلیمتر است و اغلب در لبهٔ انتهایی پهنتر، کسر نمیشود؛ بنابراین حاشیهٔ کمتر از حدود ۵ میلیمتر را چاپگر میبُرد، نه چیزی در اینجا.
- نام ماهها و روزهای هفته از دادههای محلی تعبیهشده در مرورگری میآید که این صفحه را میخواند. نسخهٔ کمحجم آن دادهها، که چند محیط اجرای تعبیهشده و خودکامپایلشده با خود دارند، بیآنکه بگوید به انگلیسی برمیگردد.
پرسشهای رایج
چرا تقویم من گاهی به شش ردیف نیاز دارد؟
چون شبکه باید خانههای خالی پیش از روز اول و خود روزها را در خود جا دهد، و وقتی این مجموع از ۳۵ بگذرد، به ردیف ششم سرریز میکند. فقط ماهی ۳۱ روزه که از ستون ششم یا هفتم شروع شود، یا ماهی ۳۰ روزه که از ستون هفتم شروع شود، میتواند چنین شود. در بیشتر سالها دو یا سه بار پیش میآید، و آن برگهها بهوضوح با بقیه فرق دارند، چون هر کادر حدود یکششم ارتفاعش را از دست میدهد.
آیا هفته باید از دوشنبه شروع شود یا یکشنبه؟
این یک قرارداد منطقهای است، نه یک پاسخ درست. دوشنبه در بیشتر اروپا رایج است و شمارهگذاری هفتهٔ ISO ۸۶۰۱ هم آن را فرض میکند؛ یکشنبه در ایالات متحده، کانادا و ژاپن رایج است؛ شنبه در بخش بزرگی از خاورمیانه معمول است. آنچه برای چاپ مهم است این است که این انتخاب هر تاریخ را یک ستون جابهجا میکند و میتواند یک ردیف کامل اضافه یا کم کند: فوریه ۲۰۲۶ با شروع دوشنبه پنج ردیف است و با شروع یکشنبه چهار ردیف.
چرا شمارهٔ هفته در اوایل ژانویه ۵۲ یا ۵۳ است؟
چون ISO ۸۶۰۱ هفتهها را شمارهگذاری میکند نه روزها را، و هر هفته متعلق به سالی است که پنجشنبهاش در آن میافتد. ۱ ژانویه ۲۰۲۷ جمعه است، بنابراین هفتهای که در آن قرار دارد از دوشنبه ۲۸ دسامبر ۲۰۲۶ شروع شده و در نتیجه هفتهٔ ۵۳ سال ۲۰۲۶ است، نه هفتهٔ ۱ سال ۲۰۲۷. همین قاعده در جهت مخالف هم کار میکند: ۲۹ دسامبر ۲۰۲۵ دوشنبه است، بنابراین سه روز آخر ۲۰۲۵ از همان موقع هفتهٔ ۱ سال ۲۰۲۶ هستند.
آیا تقویم من جایی آپلود میشود؟
نه. محاسبه در همین تب مرورگر اجرا میشود و سروری نیست که به آن فرستاده شود. نام ماهها و روزهای هفته از دادههای محلیای میآید که از قبل بخشی از مرورگر شماست، بنابراین برای ساختن آنها هم چیزی از اینترنت دریافت نمیشود.
آیا این ابزار تقویم را رسم میکند؟
هنوز نه. چیدمان کامل را به شما میدهد — تعداد ردیفها، اندازهٔ کادرها تا صدم میلیمتر، و جدولی از همهٔ تاریخها با ردیف، ستون و هفتهٔ ISO هر کدام، که بهصورت CSV دانلود میشود. این برای ساختن برگه در یک برنامهٔ طراحی، یک صفحهگسترده یا یک شیوهنامه کافی است، اما صفحهٔ آمادهای نیست که مستقیماً به چاپگر بفرستید.
چرا برگهٔ چاپشده کوچکتر از ارقام اینجا درمیآید؟
تقریباً همیشه چون مقیاس شده است. پنجرههای چاپ بهطور پیشفرض صفحه را در ناحیهٔ قابل چاپ جا میدهند، که همهچیز را دو سه درصد کوچک میکند. مقیاس را روی ۱۰۰٪ یا «اندازهٔ واقعی» بگذارید و «جا دادن در صفحه» را خاموش کنید. گذاشتن خطکش روی هر هفت ستون سریعترین بررسی است: روی A۴ افقی با حاشیهٔ ۱۲ میلیمتر باید در مجموع ۲۷۳ میلیمتر باشند.