PDA

View Full Version : گفتگو: ساعت ایران - جلوگیری از عدم اشتباه کاربر



abolfazl-z
چهارشنبه 16 اردیبهشت 1394, 22:14 عصر
سلام

چند روزی دارم برای خودم بر روی یک برنامه تاریخ جاوا اسکریپت که با PHP ساخت شده کار می کنم که چند وقتی میشد که درست و حسابی با این تاریخ و مخلفاتش سر و کار نداشتیم تا اینکه به یک مشکلی بر خوردیم و راه حل هایی پیدا کردم ولی می خواستم بدونم که دیگر دوستان چیکار می کنن و اصلا به این موضوع توجهی دارن یا نه.(از توابع jdate استفاده می کنم)

خوب نگاه کنید همه میدونیم که ساعت رسمی کشور از اول فروردین ساعت 24:00:00 یک ساعت به جلو کشیده میشه که درواقع فقط از لحاظ دیداری اینطوریه ولی timestamp تغییری نمی کنه و این مدیریت تغییر در نمایش را خود توابع انجام میدهد. اما

مشکلی کوچیک اینجا این است که کاربر نباید ساعت 00:00:1 تا ساعت 00:59:59 را در 2 فروردین انتخاب کند که درواقع این ساعت از لحاظ دیداری وجود ندارد ولی راه حل اش این است که هنگامی که کاربر می خواست در دوم فروردین ساعت 00:00:01 تا ساعت یک را انتخاب کند غیرفعال باشد و فقط از ساعت یک به بعد قابل انتخاب باشد.

خوب اینجا مشکلی بوجود نمیاد و میشه با این روش به کاربر فهموند که چنین تاریخی در این زمان وجود ندارد بلکه ساعت ها به جلو کشیده میشه !


اما از اون طرف مشکل در نمایش تاریخ کمی غیرقابل تحمل تر می شود.

به مثال زیر توجه کنید :

مهر یا برچسب زمان (timestamp) تاریخ 94/06/30 و ساعت 20:00:00 برابر با 1442849400 است.

خوب میدونیم که ساعت 24 یا همان 00:00:00 31 شهریور ، ساعت رسمی کشور یک ساعت به عقب کشیده میشه. مشکلی اصلی همین جا است به مثال زیر توجه کنید :

من با اضافه کردن سه ساعت به تاریخ بالا بصورت (3600*3) خروجی زیر را میگیرم :

1394/06/30 23:00:00

من با اضافه کردن چهار ساعت به تاریخ بالا بصورت (3600*4) خروجی زیر را میگیرم :

1394/06/30 23:00:00

خوب حالا از دید ما برنامه نویس ها که نه ! ولی از دید کاربر کدوم برای ساعت قبلی و کدوم برای جدید عقب کشیده شده است ؟

آیا این مورد قابل اهمیت است ؟

نگاه کنید نمیگم قابل حل شدن نیست ولی می خواهم بدونم که در اینطور موارد شما چیکار می کنید ؟ شاید هم برای من تازگی داره...

hamidhassas
چهارشنبه 16 اردیبهشت 1394, 23:29 عصر
من این مشکل رو با یک شرط if حل کردم به این صورت که وقتی در تاریخ مثلا 1394/06/30 بود و ساعت 23:00:00 بود بیاد خودکار ساعت صحیح رو به صورت دستی چاپ کنه و الی آخر



if($date=='1394/06/30' && $time>='230000' && $time<='235959')
{
echo 'ساعت: 22:'.$min.':'.$sec.'';
}
else
{
echo 'ساعت:'.$time.'';
}

abolfazl-z
پنج شنبه 17 اردیبهشت 1394, 12:03 عصر
نه دیگه این کلا اشتباه است ! اصلا ما چیزی به نام ساعت صحیح نداریم ساعت صحیح است ولی بصورت دیداری بر میگردیم به گذشته

یعنی درواقع که اگر بخواهیم این مشکل را حل کنیم باید بررسی کنیم که اگر مهرزمان بین ساعت 12 تا 1 شب بود بر اساس زمانی که هست مقدار تاریخ جدید را نشان دهیم و همینطور برای قدیم

مثلا بگیم 11:30 جدید و یا همچنین 11:30 قدیم

در کل می خواستم بدونم که ممکن است مشکلی پیش بیاد ؟

حدس من این هست که در واقع اگر کسی مبنای محاسبات اش را مثل مثالی که دوست ما hamidhassas زدن بگذارد(البته باز ایشون مهرزمان را هم محاسبه کردن) این اشتباه در برنامه اش رخ می دهد و ممکن است باعث دردسر شود پس در نتیجه بهتر است همیشه از مهرزمان یا timestamp استفاده کنیم.

این موضوع خیلی مهم است ولی من هیچ جایی در مورد این مطلبی پیدا نکردم.

hamidhassas
پنج شنبه 17 اردیبهشت 1394, 15:00 عصر
کد بالا فقط یک مثال بود در صورتی که این شرط رو من توی خیلی از پروژه هام شبیه به شرط if استفاده کردم تا حالا مشکلی پیش نیومده بعدشم اگر برنامه برای کاربران در ایران است خیالت راخت ساعت 23 تا 1 شب همه خوابن