حذف زمان منطقه ای و زمان تابستانی از توابع جاوا اسکریپت

i-php-i

Active Member
من باید یه تایمر بنویسم که زمان رو از سرور می گیره و نمایش می ده. برای درست کار کردن این تایمر، باید زمان منطقه ای و زمان تابستانی رو از توابع جاوا اسکریپت حذف کنم.

لطفا بگید که چطور می تونم زمان منطقه ای و زمان تابستانی رو از توابع جاوا اسکریپت حذف کنم؟
 

eAmin

Well-Known Member
سوالتون کامل نیست.
مگه شما دارید زمان رو از JavaScript میگیرید که میخواید زمان منطقه ای و تابستانی رو از اون جدا کنید؟
شما وقتی زمان رو از سرور گرفتید تنها کاری که باید انجام بدید اینه که توسط شی Date در JavaScript اون رو parse کنید تا به عنوان یک تاریخ/تایم معتبر در جاوااسکریپت شناخته بشه بعد از اون میتونید با استفاده از setInterval به اون زمان کم کم اضافه کنید.
 

i-php-i

Active Member
مگه شما دارید زمان رو از JavaScript میگیرید که میخواید زمان منطقه ای و تابستانی رو از اون جدا کنید؟
اگه شی date رو بکار ببریم، جاوا اسکریپت زمان منطقه ای رو اعمال می کنه.

وقتی تاریخ رو بر حسب زمان یونیکس از سرور می گیریم، بنظرتون دلیلی داره که بخوایم توی جاوا اسکریپت شی date رو بکار ببریم؟
 

eAmin

Well-Known Member
اگه شی date رو بکار ببریم، جاوا اسکریپت زمان منطقه ای رو اعمال می کنه.
البته اگر ما زمان دلخواه رو به عنوان پارامتر بهش ارجاع نداده باشیم! در اونصورت زمان فعلی رایانه کاربر رو نمایش میده.
وقتی تاریخ رو بر حسب زمان یونیکس از سرور می گیریم، بنظرتون دلیلی داره که بخوایم توی جاوا اسکریپت شی date رو بکار ببریم؟
خب اگر اینکار رو نکنید پس چطور میخواید ثانیه به ثانیه مثل یک ساعت تایمی که از سرور گرفتید رو بهش اضافه کنید؟
این صفحه و مثالهاش رو ببینید اونوقت میتونید چیزی که لازم دارید رو ایجاد کنید.
http://www.w3schools.com/js/js_obj_date.asp
 

i-php-i

Active Member
این صفحه و مثالهاش رو ببینید اونوقت میتونید چیزی که لازم دارید رو ایجاد کنید.
توابع تاریخ و زمان رو بلدم.
var today = new date()
var d1 = new date("october 13, 1975 11:13:00")
var d2 = new date(79,5,24)
var d3 = new date(79,5,24,11,33,0)
مشکلی که هست اینه که من بر حسب تایم استمپ یونیکس یه زمان (مثلا 10 ساعت و 15 دقیقه و 40 ثانیه بعد از زمان فعلی) رو توی سرور به دست می یارم و به جاوا اسکریپت می دم.

حالا جاوا اسکریپت با استفاده از ساعت کلاینت و زمانی که از سرور گرفته، باید یه تایمر ایجاد کنه.

مشکلی که دارم اینه که، جاوا اسکریپت ساعت منطقه ای رو هم توی تایم خودش محاسبه می کنه و تایمری که از این طریق به دست می یاد، دقت خودش رو از دست می ده.

چطور باید این مشکل رو حل کنم؟
 

eAmin

Well-Known Member
وقتی شما صریحا دارید تاریخ رو به شی Date ارجاع میدید، JavaScript از اون به بعدش دیگه کاری نداره و به طبق همون تاریخ و ساعتی که شما بهش دادید محاسبه رو انجام میده.
تایمی که از سرور میگیرید رو دقیقا به اینصورت بهش ارجاع بدید نباید مشکلی باشه:
کد:
var d1 = new Date("October 13, 1975 11:13:00");
در هرصورت شما کدی که نوشتید رو در اینجا قرار بدید تا ببینم شما به چه صورت عمل کردید.
 

i-php-i

Active Member
در هرصورت شما کدی که نوشتید رو در اینجا قرار بدید تا ببینم شما به چه صورت عمل کردید.
توی پی اچ پی این تابع رو بکار بردم:
PHP:
    date_default_timezone_set('Asia/Tehran');
این تابع باعث ایجاد اختلاف توی ساعت می شه.

توی کد جاوا اسکریپت تایم استمپ رو از سرور می گیرم و از اونجا که ممکنه کاربرها از کشورهای مختلف وارد سایت بشن، با کد زیر اختلاف زمانی کاربرهای کشورهای مختلف رو برطرف کردم.

کد:
var d1 = new Date().getTimezoneOffset();
     d1=d1*60*1000;
    var d2 = new Date().getTime();
    userDate=d2+d1;
توضیح کد بالا:
خط 1- اختلاف زمانی رو بدست می یارم.
خط 2- از اونجا که اختلاف زمانی بر حسب دقیقه هست، اون رو به میلی ثانیه تبدیل می کنم.
خط 3 - زمان فعلی رو بدست می یارم.
خط 4- اختلاف زمانی رو با زمان فعلی جمع می کنم تا زمان بر حسب گرینویچ بدست بیاد. این زمان رو به عنوان زمان فعلی محاسبه می کنم و برای ایجاد تایمر، از این زمان استفاده می کنم.

تنها مشکلی که هست اینه که زمانی که از سرور می گیرم، برحسب زمان ایران هست و این مسئله روی دقت تایمر اثر منفی داره.
 
آخرین ویرایش:

eAmin

Well-Known Member
حالا جاوا اسکریپت با استفاده از ساعت کلاینت و زمانی که از سرور گرفته، باید یه تایمر ایجاد کنه.
یک سوال میشه موضوع رو دقیقا توضیح بدید که برای چه کاری میخواید اینکار رو انجام بدید؟
شما در پست اول گفتید که میخواید ساعت سرور رو نمایش بدید:
من باید یه تایمر بنویسم که زمان رو از سرور می گیره و نمایش می ده.
ولی اون چیزی که شما در پست شماره 7 مطرح کردید کاملا با اون فرق داره...

تنها مشکلی که هست اینه که زمانی که از سرور می گیرم، برحسب زمان ایران هست و این مسئله روی دقت تایمر اثر منفی داره.
خب پس چرا اومدید از این تکه کد استفاده کردید:
کد:
[COLOR=#000000][COLOR=#0000BB]date_default_timezone_set[/COLOR][COLOR=#007700]([/COLOR][COLOR=#DD0000]'Asia/Tehran'[/COLOR][COLOR=#007700]);[/COLOR][/COLOR]
 

i-php-i

Active Member
یک سوال میشه موضوع رو دقیقا توضیح بدید که برای چه کاری میخواید اینکار رو انجام بدید؟
شما در پست اول گفتید که میخواید ساعت سرور رو نمایش بدید:
ولی اون چیزی که شما در پست شماره 7 مطرح کردید کاملا با اون فرق داره...


خب پس چرا اومدید از این تکه کد استفاده کردید:
کد:
[color=#000000][color=#0000bb]date_default_timezone_set[/color][color=#007700]([/color][color=#dd0000]'asia/tehran'[/color][color=#007700]);[/color][/color]

یک سوال میشه موضوع رو دقیقا توضیح بدید که برای چه کاری میخواید اینکار رو انجام بدید؟
می خوام یه سیستم مناقصه بسازم.
شما در پست اول گفتید که میخواید ساعت سرور رو نمایش بدید:
باید زمانی که مناقصه می خواد به پایان برسه رو از سرور بگیرم و تایمر رو بر حسب توابع جاوا اسکریپت بدست بیارم.
خب پس چرا اومدید از این تکه کد استفاده کردید:
برای ساعت وب سایتم از این تابع استفاده کردم ولی این تابع روی تایمر مناقصه هم تاثیر می ذاره.

همونطور که می دونید زمان ایران 210 دقیقه از زمان گرینویچ جلو هست، می تونم این مقدار رو از زمان سرور کم کنم ولی مشکل اینجاست که نمی دونم ساعت تابستانی رو چطور محاسبه کنم؟
 

eAmin

Well-Known Member
باید زمانی که مناقصه می خواد به پایان برسه رو از سرور بگیرم و تایمر رو بر حسب توابع جاوا اسکریپت بدست بیارم.
اگر اشتباه نکنم شما به یک چیزی مثل countdown timer نیاز دارید. برای کاری که شما مدنظر دارید گزینه مناسبی هست.
برای این تایمر هم نیازی نیست که ساعت رو از طریق سیستم کاربر چک کنید کافیه تایم های مناسب رو از سرور دریافت و طبق اون تایمر رو ایجاد کنید.
 

i-php-i

Active Member
برای این تایمر هم نیازی نیست که ساعت رو از طریق سیستم کاربر چک کنید کافیه تایم های مناسب رو از سرور دریافت و طبق اون تایمر رو ایجاد کنید.
قبلا به این موضوع فکر کرده بودم ولی چون پی اچ پی و جاوا اسکریپت هردو زمانها رو از یه تاریخ مشخص محاسبه می کنن، نمی شه از این روش استفاده کرد و تایمرها توی کشورهای مختلف زمان های مختلفی نمایش می دن. چون ساعت جاوا اسکریپت توی کشورهای مختلف عقب و جلو می ره.

راهی نیست که بشه توی جاوا اسکریپت زمان تابستانی رو محاسبه کرد؟
 
آخرین ویرایش:

eAmin

Well-Known Member
راهی نیست که بشه توی جاوا اسکریپت زمان تابستانی رو محاسبه کرد؟
بطور کلی روش مشخصی برای اینکار در نظر گرفته نشده، شما باشید الگوریتمش رو بلد باشید.
بد نیست به این لینکها یک نگاهی بندازید:
http://www.codeproject.com/KB/datetime/DSTCalculator.aspx
http://www.csgnetwork.com/timezoneproginfo.html
http://www.mresoftware.com/simpleDST.htm
http://javascript.about.com/library/bldst.htm
 

i-php-i

Active Member
بطور کلی روش مشخصی برای اینکار در نظر گرفته نشده، شما باشید الگوریتمش رو بلد باشید.
تصمیم گرفتم که توی سرور عدد 210*60 رو از زمان فعلی کم کنم تا زمان گرینویچ بدست بیاد و این زمان رو برای کلاینت بفرستم. توی کلاینت هم زمان منطقه ای رو هم بدست می یارم و ازمان فعلی کم می کنم تا زمان گرینویچ بدست بیاد و بعد تایمر رو ایجاد کنم.

تابع set_time.... توی پی اچ پی ساعت تابستانی رو حساب می کنه و درنتیجه مشکلی از این نظر ندارم.

البته جاوا اسکریپت ساعت تابستانی رو حساب نمی کنه و دیگه لازمنیست که از این نظر نگران باشم. آیا این موضوع درسته؟
 

جدیدترین ارسال ها

بالا