Daily Details-এ “চন্দ্রাস্ত: আজ ১১:০০ PM” এবং “চন্দ্রোদয়: নিশা ২:১৭ AM”—এই দুই event কেবল clock time দিয়ে sort করলে ২:১৭ আগে চলে আসবে। কিন্তু পঞ্জিকা দিবস sunrise থেকে পরের sunrise; তাই absolute instant অনুযায়ী ১১:০০ PM-এর পরে পরদিন ২:১৭ AM। Moonrise calculation ও day-ordering—দুটি সমস্যাই সঠিকভাবে সমাধান করতে হয়।
চন্দ্রোদয় ও চন্দ্রাস্তের standard definition
সাধারণ astronomical almanac-এ Moonrise হলো standard atmosphere ও unobstructed horizon ধরে Moon-এর apparent upper limb horizon-এ ওঠার মুহূর্ত। Moonset হলো upper limb horizon-এর নিচে অদৃশ্য হওয়ার মুহূর্ত। Rashtriya Panchang-ও Moonrise/Moonset-কে upper-limb appearance/disappearance হিসেবে বর্ণনা করে।
এই definition-এ চারটি quantity দরকার:
- Moon-এর geocentric position;
- observer-এর latitude, longitude ও elevation;
- topocentric parallax ও lunar semidiameter;
- refraction এবং chosen horizon।
Sun-এর −০.৮৩৩৩° threshold Moon-এ ব্যবহার করা যাবে না
Standard solar sunrise-এ Sun center-এর fixed approximate altitude −০.৮৩৩৩° বহুল ব্যবহৃত। Moon-এর ক্ষেত্রে এমন fixed solar threshold ভুল, কারণ horizontal parallax ও apparent semidiameter lunar distance-এর সঙ্গে উল্লেখযোগ্যভাবে বদলায়।
U.S. Naval Observatory-এর Astronomical Almanac convention:
s = Moon-এর apparent semidiameter
π = Moon-এর horizontal parallax
এটি Earth center-referred true zenith distance of lunar center। Refraction ৩৪′, upper-limb semidiameter এবং parallax একই equation-এ ধরা হয়। s ও π dynamic হওয়ায় একটি static center-altitude constant যথেষ্ট নয়।
Horizontal parallax এত গুরুত্বপূর্ণ কেন?
Geocentric direction Earth-এর কেন্দ্র থেকে; topocentric direction observer-এর স্থান থেকে। Moon কাছে হওয়ায় দুই direction-এর angular difference horizon-এর কাছে প্রায় এক degree-এর কাছাকাছি হতে পারে—Sun-এর তুলনায় অনেক বড়।
horizon-এর কাছে parallax effect সর্বাধিক
অর্থাৎ geocentric Moon horizon-এর ওপরে থাকলেও observer-এর topocentric Moon এখনও উঠেনি—এমন হতে পারে। Longitude/latitude বাদ দিয়ে শুধু global Moon position থেকে local rise time পাওয়া যায় না।
Lunar semidiameter কেন প্রতিদিন একই নয়?
Moon-এর orbit elliptical। Perigee-তে Moon কাছে ও apparent disk বড়; apogee-তে দূরে ও ছোট। NASA-র educational material-ও perigee–apogee distance-এর সঙ্গে apparent diameter-এর পরিবর্তন দেখায়। তাই upper-limb event-এ center থেকে limb-এর angular separation dynamic।
একটি production engine-এ:
- প্রতিটি trial instant-এ Moon distance নিন;
- সেখান থেকে apparent semidiameter বা library-supplied limb calculation ব্যবহার করুন;
- mean fixed ১৫′/১৬′ value দিয়ে historical বা precision output force করবেন না।
Lunar mountains ও valleys প্রকৃত limb সামান্য irregular করে। সাধারণ almanac mean limb ব্যবহার করে; eclipse-contact precision-এর মতো lunar topography correction সাধারণ Moonrise report-এ প্রয়োজন হয় না।
Refraction ও upper limb
Atmospheric refraction Moon-কে geometric অবস্থানের চেয়ে ওপরে দেখায়। Upper limb center-এর আগে ওঠে এবং center-এর পরে অস্ত যায়। তাই standard apparent upper-limb profile সাধারণত center/no-refraction profile-এর তুলনায় moonrise আগে ও moonset পরে দেয়।
কিন্তু observed time exact নয়। Horizon-এর pressure, temperature, inversion layer এবং haze refraction বদলাতে পারে। পাহাড়, গাছ বা building থাকলে visible Moonrise theoretical open-horizon time-এর পরে হবে।
চাঁদের phase Moonrise definition বদলায় না
Upper limb বলতে পুরো lunar disk-এর geometric apparent limb—আলোকিত অংশের কিনারা নয়। Crescent-এর upper limb অন্ধকার হলেও standard Moonrise calculation disk-কেই ধরে। U.S. Naval Observatory স্পষ্ট করে যে rise/set definition-এ Moon phase বিবেচিত হয় না।
তাই তিনটি event আলাদা:
| Event | অর্থ | অতিরিক্ত শর্ত |
|---|---|---|
| Moonrise | Apparent lunar limb horizon crossing | Geometry + refraction |
| Crescent visibility | চোখে নতুন চাঁদ দেখা সম্ভব | Elongation, altitude, arc of light, sky brightness, weather |
| Tithi boundary | Moon–Sun geocentric elongation ১২° boundary | Horizon-এর সঙ্গে সম্পর্ক নেই |
Moonrise মানেই crescent দেখা যাবে না; আবার Hijri observational rule-কে Moonrise time alone দিয়ে নির্ধারণ করা যাবে না।
প্রতিদিন “৫০ মিনিট পরে” শুধু গড় ধারণা
Earth ঘুরতে ঘুরতে Moon নিজ orbit-এ পূর্বদিকে এগোয়; তাই একই meridian-এ ফিরতে ২৪ ঘণ্টার চেয়ে বেশি সময় লাগে। Successive moonrise বা moonset-এর interval গড়ে প্রায় ২৫ ঘণ্টা, কিন্তু latitude, declination ও orbital speed অনুযায়ী যথেষ্ট পরিবর্তিত হয়।
ফলে কোনো civil date-এ:
- একটি Moonrise থাকতে পারে;
- Moonrise নাও থাকতে পারে;
- Moonset থাকতে পারে কিন্তু Moonrise না-ও থাকতে পারে;
- high latitude-এ continuous-above/below বা unusual sequence হতে পারে।
USNO yearly table-এ blank Moonrise/Moonset cell বৈধ, কারণ successive event-এর interval ২৪ ঘণ্টার চেয়ে দীর্ঘ হতে পারে। “আগের দিনের সময় + ৫০ মিনিট” production algorithm নয়।
Civil date নয়—sunrise থেকে next sunrise scan
Panchanga day:
Include Moon event e when:
SunriseUtc ≤ e.InstantUtc < NextSunriseUtc
এ interval civil midnight অতিক্রম করে। তাই Moon events absolute UTC/JD instant দিয়ে filter ও sort করুন। Local TimeOfDay sort ভুল:
// ভুল: 02:17 AM-কে 11:00 PM-এর আগে বসাবে
events.OrderBy(x => x.LocalTime.TimeOfDay);
// সঠিক
events.OrderBy(x => x.InstantUtc);
একটি Vedic day-এ Moonset আগে এবং Moonrise পরে হতে পারে; phase অনুযায়ী Moonrise আগে ও Moonset পরে-ও হতে পারে। Fixed “rise তারপর set” order ধরে template বানাবেন না।
Location, horizon ও elevation
Moonrise/Moonset location-specific। Request profile-এ রাখুন:
- latitude ও longitude;
- observer elevation;
- time-zone ID;
- disc definition;
- refraction/atmosphere policy;
- ideal না true local horizon।
Elevation horizon dip-এর কারণে open landscape-এ Moonrise আগে ও Moonset পরে হতে পারে। কিন্তু eastern hill Moonrise delay করতে পারে। একটি single elevation value terrain skyline-এর বিকল্প নয়।
পঞ্জিকায় Moonrise/Moonset-এর ভূমিকা
Moonrise একটি local observational event; তিথি geocentric angular event। তবু practice rule-এ Moonrise গুরুত্বপূর্ণ হতে পারে—যেমন কোনো vrata-তে চন্দ্রদর্শন বা Moonrise-পরবর্তী আচার। Production architecture:
- Astronomy layer exact Moon rise/set event দেয়;
- Vedic-day layer sunrise span-এ events assign করে;
- Festival policy relevant event নির্বাচন করে;
- Language layer “আজ”, “নিশা”, “পরদিন” render করে।
Festival rule astronomy engine-এর মধ্যে hard-code করবেন না। একই Moonrise data বিভিন্ন tradition আলাদাভাবে interpret করতে পারে।
এই project-এর Moon profile
আপনার app-এর current convention: Moon edge/apparent—অর্থাৎ apparent lunar limb এবং refraction-aware local event। এটি বজায় রেখে একটি explicit profile key দিন:
moonRiseSetProfile = "moon-upper-limb-apparent";
moonRiseSetProfileVersion = "1.0";
| Preset | Disc | Refraction | ব্যবহার |
|---|---|---|---|
moon-upper-limb-apparent | Upper limb | Standard | Primary daily Panchanga display |
moon-center-geometric | Center | None | Research comparison only |
moon-upper-limb-true-horizon | Upper limb | Measured/standard | Terrain-aware observation |
C# 5-compatible data model
public enum MoonEventKind
{
Rise,
Set
}
public enum LunarDiscDefinition
{
UpperLimb,
Center,
LowerLimb
}
public enum LunarRefractionMode
{
Standard,
None,
MeasuredAtmosphere
}
public sealed class LunarRiseSetProfile
{
public string Key { get; set; }
public string Version { get; set; }
public LunarDiscDefinition Disc { get; set; }
public LunarRefractionMode Refraction { get; set; }
public double PressureHpa { get; set; }
public double TemperatureC { get; set; }
public double ObserverElevationMeters { get; set; }
public double HorizonAltitudeDegrees { get; set; }
}
public sealed class MoonHorizonEvent
{
public MoonEventKind Kind { get; set; }
public DateTimeOffset InstantUtc { get; set; }
public DateTimeOffset LocalTime { get; set; }
public double JulianDayUt { get; set; }
public int LocalDateOffset { get; set; }
public string ProfileKey { get; set; }
}
public sealed class MoonSearchResult
{
public bool Found { get; set; }
public DateTimeOffset InstantUtc { get; set; }
public double JulianDayUt { get; set; }
public string Status { get; set; }
public int NativeReturnCode { get; set; }
public string NativeMessage { get; set; }
}
public sealed class VedicDayMoonReport
{
public DateTime LocalAnchorDate { get; set; }
public DateTimeOffset SunriseUtc { get; set; }
public DateTimeOffset NextSunriseUtc { get; set; }
public IList<MoonHorizonEvent> Events { get; set; }
public bool HasMoonrise { get; set; }
public bool HasMoonset { get; set; }
}
Swiss Ephemeris flags
swe_rise_trans() Moon-সহ planets ও stars-এর rise/set গণনা করে। Default behavior apparent upper limb/refraction profile-এর জন্য উপযোগী। C# wrapper অনুযায়ী constant নাম adapt করুন:
static int BuildMoonRiseSetMode(
MoonEventKind kind,
LunarRiseSetProfile profile)
{
int mode = kind == MoonEventKind.Rise
? SweConst.SE_CALC_RISE
: SweConst.SE_CALC_SET;
if (profile.Disc == LunarDiscDefinition.Center)
mode |= SweConst.SE_BIT_DISC_CENTER;
else if (profile.Disc == LunarDiscDefinition.LowerLimb)
mode |= SweConst.SE_BIT_DISC_BOTTOM;
if (profile.Refraction == LunarRefractionMode.None)
mode |= SweConst.SE_BIT_NO_REFRACTION;
return mode;
}
Primary moon-upper-limb-apparent preset-এ disc-center বা no-refraction bit যোগ করবেন না। SE_BIT_HINDU_RISING Sun-এর Hindu sunrise preset; Moon profile-এ অন্ধভাবে reuse করবেন না। Moon body ID, geoposition এবং correct pressure/temperature পাঠান।
static LunarRiseSetProfile PrimaryMoonProfile()
{
return new LunarRiseSetProfile
{
Key = "moon-upper-limb-apparent",
Version = "1.0",
Disc = LunarDiscDefinition.UpperLimb,
Refraction = LunarRefractionMode.Standard,
PressureHpa = 0.0, // Engine default/estimated pressure
TemperatureC = 15.0,
ObserverElevationMeters = 0.0,
HorizonAltitudeDegrees = 0.0
};
}
Swiss documentation অনুযায়ী pressure ০ দিলে engine altitude/temperature থেকে estimate করতে পারে; wrapper behavior যাচাই করে profile note-এ লিখুন। Native return code event-not-found/error হলে unrepresentable DateTime বানাবেন না।
Sunrise-to-sunrise Moon event scanner
একটি adapter next rise বা set absolute instant ফেরত দেবে:
public interface IMoonHorizonCalculator
{
MoonSearchResult FindNextMoonEventUtc(
DateTimeOffset searchFromUtc,
MoonEventKind kind,
DesktopLocation location,
LunarRiseSetProfile profile);
}
তারপর rise ও set independently scan করে merge/sort করুন:
public static IList<MoonHorizonEvent> ScanMoonEvents(
DateTime anchorDate,
DateTimeOffset sunriseUtc,
DateTimeOffset nextSunriseUtc,
DesktopLocation location,
LunarRiseSetProfile profile,
IMoonHorizonCalculator calculator)
{
var result = new List<MoonHorizonEvent>();
MoonEventKind[] kinds =
{
MoonEventKind.Rise,
MoonEventKind.Set
};
TimeZoneInfo zone = TimeZoneInfo.FindSystemTimeZoneById(
location.TimeZoneId);
foreach (MoonEventKind kind in kinds)
{
DateTimeOffset cursor = sunriseUtc.AddSeconds(-1.0);
for (int safety = 0; safety < 4; safety++)
{
MoonSearchResult found = calculator.FindNextMoonEventUtc(
cursor, kind, location, profile);
if (!found.Found)
break;
DateTimeOffset instant = found.InstantUtc.ToUniversalTime();
if (instant >= nextSunriseUtc)
break;
if (instant >= sunriseUtc)
{
DateTimeOffset local = TimeZoneInfo.ConvertTime(
instant, zone);
result.Add(new MoonHorizonEvent
{
Kind = kind,
InstantUtc = instant,
LocalTime = local,
JulianDayUt = found.JulianDayUt,
LocalDateOffset =
(local.Date - anchorDate.Date).Days,
ProfileKey = profile.Key
});
}
cursor = instant.AddSeconds(1.0);
}
}
return result
.OrderBy(x => x.InstantUtc)
.ThenBy(x => x.Kind)
.ToList();
}
sunriseUtc.AddSeconds(-1) exact sunrise event include করার জন্য। Adapter strict-after semantics দিলে এটি কাজ করবে; adapter inclusive হলে duplicate guard যোগ করুন। Safety limit accidental infinite loop থামায়—normal latitude-এ limit hit করা expected নয়।
Report তৈরি
public static VedicDayMoonReport BuildMoonReport(
DateTime localAnchorDate,
DateTimeOffset sunriseUtc,
DateTimeOffset nextSunriseUtc,
DesktopLocation location,
LunarRiseSetProfile profile,
IMoonHorizonCalculator calculator)
{
IList<MoonHorizonEvent> events = ScanMoonEvents(
localAnchorDate,
sunriseUtc,
nextSunriseUtc,
location,
profile,
calculator);
return new VedicDayMoonReport
{
LocalAnchorDate = localAnchorDate,
SunriseUtc = sunriseUtc,
NextSunriseUtc = nextSunriseUtc,
Events = events,
HasMoonrise = events.Any(x => x.Kind == MoonEventKind.Rise),
HasMoonset = events.Any(x => x.Kind == MoonEventKind.Set)
};
}
“আজ”, “নিশা” ও “পরদিন” display
Clock time-এর সঙ্গে date relation দেখান:
static string MoonEventDayLabel(MoonHorizonEvent value)
{
if (value.LocalDateOffset < 0) return "আগের দিন";
if (value.LocalDateOffset == 0) return "আজ";
if (value.LocalDateOffset == 1) return "পরদিন";
return "দিন +" + value.LocalDateOffset.ToString(
CultureInfo.InvariantCulture);
}
static string MoonEventNameBn(MoonEventKind kind)
{
return kind == MoonEventKind.Rise
? "চন্দ্রোদয়"
: "চন্দ্রাস্ত";
}
Post-midnight কিন্তু next sunrise-এর আগের event-এ আপনার existing style অনুযায়ী নিশা যোগ করা যায়:
চন্দ্রাস্ত: আজ রাত ১১:০০
চন্দ্রোদয়: পরদিন নিশা ২:১৭
যদি Vedic span-এ Moonrise না থাকে, “চন্দ্রোদয়: এই পঞ্জিকা দিবসে নেই” দেখান। পরের event চাইলে আলাদা informative field দিন—current day-এর event হিসেবে ঢোকাবেন না।
Time zone ও DST
Rise/set geometry UT/JD-তে solve হয়; time zone কেবল local display এবং local-date offset নির্ধারণ করে। DST-এর কারণে:
- local clock label বদলায়;
- same UTC interval-এর wall-clock duration বদলাতে পারে;
LocalDateOffsetevent-এর actual zone conversion-এর পরে হিসাব করতে হবে;- fixed offset দিয়ে New York historical/future output করা উচিত নয়।
Moonrise search seed local midnight থেকে বানিয়ে fixed offset subtract করার বদলে Vedic span-এর already-resolved UTC boundary ব্যবহার করা নিরাপদ।
Historical Moonrise/Moonset
Early historical calculation-এ internal JD রাখুন। .NET DateTime-এ intermediate conversion করলে year-range ও Julian/Gregorian reform সমস্যা হতে পারে। Export metadata:
- JD UT of each event;
- Moon ephemeris/version ও ΔT policy;
- latitude, longitude, elevation;
- historical time-zone/LMT profile;
- limb/refraction/horizon profile;
- Julian/Gregorian display calendar।
Historical atmosphere ও terrain জানা না থাকলে output হলো conventional computed Moonrise—not guaranteed eyewitness time। Seconds দেখালেও uncertainty note দিন।
No-rise, no-set ও continuously-above cases
High latitude-এ Moon-এর declination ও horizon geometry অনুযায়ী:
MoonriseNotFoundInSpan
MoonsetNotFoundInSpan
MoonContinuouslyAboveHorizon
MoonContinuouslyBelowHorizon
NativeCalculationError
প্রথম দুটি normal no-event result; শেষটি calculation error। একই message-এ মিশিয়ে ফেললে user বুঝতে পারবেন না blank field বৈধ, না engine ব্যর্থ হয়েছে।
API ও XML output
{
"anchorDate": "2026-10-09",
"vedicDay": {
"sunrise": "2026-10-09T05:55:02+06:00",
"nextSunrise": "2026-10-10T05:55:24+06:00"
},
"moonProfile": {
"key": "moon-upper-limb-apparent",
"version": "1.0",
"disc": "upper-limb",
"refraction": "standard"
},
"events": [
{
"kind": "set",
"local": "2026-10-09T23:00:18+06:00",
"dayOffset": 0
},
{
"kind": "rise",
"local": "2026-10-10T02:17:41+06:00",
"dayOffset": 1,
"vedicLabel": "নিশা"
}
]
}
উপরের সময়গুলো ordering-format example; astronomical test vector নয়। XML:
<moon-events anchor-date="2026-10-09"
profile="moon-upper-limb-apparent"
profile-version="1.0">
<span sunrise="2026-10-09T05:55:02+06:00"
next-sunrise="2026-10-10T05:55:24+06:00" />
<event kind="set" local="2026-10-09T23:00:18+06:00"
day-offset="0" />
<event kind="rise" local="2026-10-10T02:17:41+06:00"
day-offset="1" vedic-label="নিশা" />
</moon-events>
Daily XML-এর <tithi> block-এ rendered rise/set text রাখতে পারেন; research API-তে event list ও profile metadata আলাদা রাখাই ভালো।
সাধারণ implementation error
| ভুল | ফল | সংশোধন |
|---|---|---|
| Solar −০.৮৩৩৩° Moon-এ | Parallax/semidiameter mismatch | Body-aware lunar solver |
| Geocentric altitude-ই local Moonrise | বড় timing error | Topocentric parallax |
| Fixed lunar semidiameter | Perigee/apogee variation হারায় | Dynamic Moon distance |
| Illuminated crescent limb | Phase-dependent false rise | Full apparent disk limb |
| আগের দিন +৫০ মিনিট | Declination/orbital-speed error | প্রতিটি event solve |
| Clock-time sorting | Post-midnight order উল্টো | UTC/JD sorting |
| Civil midnight window | Vedic day event missing | Sunrise-to-next-sunrise interval |
| Always rise-before-set template | Phase-dependent sequence ভুল | Chronological event list |
| Blank মানেই error | Valid no-event date rejected | Explicit status |
| Sun Hindu flag Moon-এ | Unintended center/no-refraction | Separate Moon profile |
| Moonrise = crescent visibility | Hijri rule ভুল | Dedicated visibility model |
| DateTime.MinValue fallback | Early-year exception | Found/status result |
Validation checklist
- Primary profile upper limb + standard refraction;
- Center/no-refraction comparison profile;
- Upper-limb rise center-rise-এর আগে;
- Upper-limb set center-set-এর পরে;
- Dynamic horizontal parallax;
- Dynamic lunar semidiameter;
- Perigee test;
- Apogee test;
- USNO (90°34′ + s - π) reference check;
- No solar −০.৮৩৩৩° reuse;
- Topocentric location applied;
- Dhaka regression;
- Kolkata regression;
- New York regression;
- Same instant, different longitude;
- Elevation test;
- Positive terrain horizon test;
- Pressure default documented;
- Temperature variation path;
- Phase does not change limb definition;
- Dark upper limb accepted;
- New Moon vicinity;
- First-quarter sequence;
- Full Moon vicinity;
- Last-quarter sequence;
- Moonrise-only Vedic day;
- Moonset-only Vedic day;
- Both events;
- No Moonrise in span;
- No Moonset in span;
- Moonset-before-Moonrise order;
- Moonrise-before-Moonset order;
- Post-midnight event dayOffset=1;
- Absolute instant sorting;
- Exact sunrise event included;
- Exact next-sunrise event excluded;
- No duplicate after one-second cursor advance;
- Inclusive adapter duplicate guard;
- Safety limit not reached normally;
- DST spring transition;
- DST fall transition;
- Historic LMT profile;
- Early year internal JD;
- Julian/Gregorian labels same event JD;
- Polar continuously-above status;
- Polar continuously-below status;
- Native error separate from no-event;
- No DateTime.MinValue fallback;
- HTML/API/XML event order identical;
- Profile/version cache key-তে;
- Comparison with USNO/printed Panchanga matching profile।
উপসংহার
Moonrise/Moonset একটি local topocentric horizon event। Moon কাছাকাছি বলে parallax বড়; orbit elliptical বলে parallax ও semidiameter বদলায়। তাই fixed solar threshold বা আগের দিনের সময়ে ৫০ মিনিট যোগ করে নির্ভরযোগ্য ফল পাওয়া যায় না।
Standard apparent event-এ full lunar disk-এর upper limb, refraction এবং dynamic parallax/semidiameter ব্যবহার করুন—Moon phase নয়। কোনো civil date বা Vedic day-এ Moonrise না থাকাও স্বাভাবিক বৈধ ফল।
আপনার Daily Details-এ sunrise-to-next-sunrise interval নিয়ে rise ও set independently search, UTC/JD instant-এ merge/sort এবং local date offset দিয়ে “আজ/পরদিন/নিশা” render করলে event order স্থিতিশীল থাকবে। Current moon-upper-limb-apparent profile স্পষ্টভাবে version করলে printed Panchanga comparison-ও পুনরুৎপাদনযোগ্য হবে।
তথ্যসূত্র ও আরও পাঠ
- U.S. Naval Observatory—Rise, Set and Twilight Definitions; lunar upper limb, phase-independent disk এবং no-event date.
- U.S. Naval Observatory—Astronomical Almanac Glossary; Moonrise zenith-distance formula (90°34′ + s - π).
- USNO—Rise/Set/Transit Times; successive Moon events-এর প্রায় ২৫ ঘণ্টা interval ও blank date explanation.
- Swiss Ephemeris Programmer’s Documentation; Moon/planet rise-set, disc, refraction ও true-horizon functions.
- Positional Astronomy Centre—Rashtriya Panchang Explanation; Moonrise/Moonset upper-limb convention.
- NASA Science—Near and Far; perigee/apogee-তে Moon-এর apparent-size change.
- NASA Science—Moon Facts; lunar size, distance ও orbit background.
- সূর্য সিদ্ধান্ত পঞ্জিকা project specification; Moon edge/apparent profile এবং sunrise-to-next-sunrise ordering.
মন্তব্য, আলোচনা ও প্রশ্ন