توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : تبدیل Timestamp به Readable Time
TATSERVER.NET
September 15th, 2016, 14:58
با سلام خدمت دوستان و اساتید.
یک سوال کوچیک داشتم،
هیچ راهی برای تبدیل Timestamp به Readable Time در زبان هایی که برای این کار هیچ Functionای وجود نداره هست؟
موقتاً با HTTP Request و PHP این کارو انجام میدم.
دوستان اگر الگوریتمی برای این کار میدونن ممنون میشم.
lizard.tiny
September 15th, 2016, 15:02
سلام
روی php به راحتی قابل انجام هست
برای چه زبانی مد نظرتون هست ؟
TATSERVER.NET
September 15th, 2016, 15:03
سلام
روی php به راحتی قابل انجام هست
برای چه زبانی مد نظرتون هست ؟
بله تا حدودی با همون PHP تا الان این کارو انجام میدادم. الان دنبال الگوریتمی هستم که تابع خودمو بنویسم باهاش.
برای زبان pawn: http://www.compuphase.com/pawn/pawn.htm
lizard.tiny
September 15th, 2016, 15:09
بله تا حدودی با همون PHP تا الان این کارو انجام میدادم. الان دنبال الگوریتمی هستم که تابع خودمو بنویسم باهاش.
برای زبان pawn: http://www.compuphase.com/pawn/pawn.htm
متاسفانه با این زبان آشنایی ندارم
این رو ببینید شاید کمک کنه : http://www.epochconverter.com
TATSERVER.NET
September 15th, 2016, 15:12
متاسفانه با این زبان آشنایی ندارم
این رو ببینید شاید کمک کنه : http://www.epochconverter.com
متسفانه اینجا هم از الگوریتمش توضیحی نداده.
موقتاً دارم از
<?php echo @date("g:i:s j/n/Y",$_GET['time']); ?>
و ارسال Request برای تبدیل استفاده میکنم که سرعتش خیلی کمه.
دوستان اگر الگوریتمشو میدونید اعلام کنید.
lizard.tiny
September 15th, 2016, 15:16
از چه نظر سرعتش کمه ؟ میخوایید تعداد زیادی رو تبدیل کنید ؟
TATSERVER.NET
September 15th, 2016, 15:18
از چه نظر سرعتش کمه ؟ میخوایید تعداد زیادی رو تبدیل کنید ؟
هم تعداد زیاده، و هم Request ها خیلی زیاد ارسال میشه و ممکنه اون سرور آی پی رو بلاک کنه.
iHSG
September 15th, 2016, 15:20
متسفانه اینجا هم از الگوریتمش توضیحی نداده.
موقتاً دارم از
<?php echo @date("g:i:s j/n/Y",$_GET['time']); ?>
و ارسال Request برای تبدیل استفاده میکنم که سرعتش خیلی کمه.
دوستان اگر الگوریتمشو میدونید اعلام کنید.
در این کد علامت @ قبل تابع date باعث کاهش سرعت میشه چون این علامت تا اون جا که می دونم قبل از اجرای تابع error_reporting رو برابر با 0 میکنه که اخطاری هم بود نمایش نده بعدش دوباره error_reporting رو به حالت قبل بر می گردونه سر همین موضوع اول هر تابع علامت @ بذارید سرعتش میاد پایین.
بعدش جسارتاً برای تبدیل رشته (String) محتوی تاریخ در PHP نباید همینطوری از اون رشته مستقیم استفاده بشه بلکه باید از تابع پیش فرض PHP برای این کار یعنی strtotime استفاده بشه و بعدش خروجی این تابع strtotime رو به تابع date بدن.
lizard.tiny
September 15th, 2016, 15:21
هم تعداد زیاده، و هم Request ها خیلی زیاد ارسال میشه و ممکنه اون سرور آی پی رو بلاک کنه.
بجای request یک textarea بزار که محتوی POST کنه
توی فایل PHP هم با یه for یا while ساده مشخص کن که کل اطلاعات رو از پست بگیره و بابت هر خط یک بار عملیات تبدیل رو انجام بده و در نهایت یک خروجی بده که همه رو تبدیل کرده
T.Toosi
September 15th, 2016, 15:26
$t=time();
/*
* Transform a Unix Timestamp to ISO 8601 Date format YYYY-MM-DD
* @param unix timestamp
* @return Returns a formated date (YYYY-MM-DD) or false
*/
function unixToIso8601($timestamp){
if($timestamp<0){return false;}//Do not accept negative values
/* Too many constants, add this to a class to speed things up. */
$year=1970;//Unix Epoc begins 1970-01-01
$dayInSeconds=86400;//60secs*60mins*24hours
$daysInYear=365;//Non Leap Year
$daysInLYear=$daysInYear+1;//Leap year
$days=(int)($timestamp/$dayInSeconds);//Days passed since UNIX Epoc
$tmpDays=$days+1;//If passed (timestamp < $dayInSeconds), it will return 0, so add 1
$monthsInDays=array();//Months will be in here ***Taken from the PHP source code***
$month=11;//This will be the returned MONTH NUMBER.
$day;//This will be the returned day number.
while($tmpDays>=$daysInYear){//Start adding years to 1970
$year++;
if(isLeap($year)){
$tmpDays-=$daysInLYear;
}
else{
$tmpDays-=$daysInYear;
}
}
if(isLeap($year)){//The year is a leap year
$tmpDays--;//Remove the extra day
$monthsInDays=array(-1,30,59,90,120,151,181,212,243,273,304,334);
}
else{
$monthsInDays=array(0,31,59,90,120,151,181,212,243 ,273,304,334);
}
while($month>0){
if($tmpDays>$monthsInDays[$month]){
break;//$month+1 is now the month number.
}
$month--;
}
$day=$tmpDays-$monthsInDays[$month];//Setup the date
$month++;//Increment by one to give the accurate month
return $year.'-'.(($month<10)?'0'.$month:$month).'-'.(($day<10)?'0'.$day:$day);
}
function isLeap($y){
return (($y)%4==0&&(($y)%100!=0||($y)%400==0));
}
echo unixToIso8601($t);
Yas-Host
September 15th, 2016, 15:28
pawn در چه سیستم عامل هایی نصب می شود؟ امکان استفاده از کد های دیگر زبان ها وجود ندارد؟ یا اجرای دستورات معقول که در سیستم عامل اجرا می شوند؟
TATSERVER.NET
September 15th, 2016, 15:37
در این کد علامت @ قبل تابع date باعث کاهش سرعت میشه چون این علامت تا اون جا که می دونم قبل از اجرای تابع error_reporting رو برابر با 0 میکنه که اخطاری هم بود نمایش نده بعدش دوباره error_reporting رو به حالت قبل بر می گردونه سر همین موضوع اول هر تابع علامت @ بذارید سرعتش میاد پایین.
بعدش جسارتاً برای تبدیل رشته (String) محتوی تاریخ در PHP نباید همینطوری از اون رشته مستقیم استفاده بشه بلکه باید از تابع پیش فرض PHP برای این کار یعنی strtotime استفاده بشه و بعدش خروجی این تابع strtotime رو به تابع date بدن.
به صورت موقتاً اون کد رو گذاشتم تا الگوریتمشو پیدا کنم. بعد من Timestamp رو میخوام تبدیل کنم نه بلعکس، (توضیحات تابع: English textual datetime description into a Unix timestamp)
بجای request یک textarea بزار که محتوی POST کنه
توی فایل PHP هم با یه for یا while ساده مشخص کن که کل اطلاعات رو از پست بگیره و بابت هر خط یک بار عملیات تبدیل رو انجام بده و در نهایت یک خروجی بده که همه رو تبدیل کرده
مشکل اینه که کل اطلاعات رو ندارم، از سمت کلاینت اطلاعات میاد که همون موقع باید پردازش بشه.
$t=time();
/*
* Transform a Unix Timestamp to ISO 8601 Date format YYYY-MM-DD
* @param unix timestamp
* @return Returns a formated date (YYYY-MM-DD) or false
*/
function unixToIso8601($timestamp){
if($timestamp<0){return false;}//Do not accept negative values
/* Too many constants, add this to a class to speed things up. */
$year=1970;//Unix Epoc begins 1970-01-01
$dayInSeconds=86400;//60secs*60mins*24hours
$daysInYear=365;//Non Leap Year
$daysInLYear=$daysInYear+1;//Leap year
$days=(int)($timestamp/$dayInSeconds);//Days passed since UNIX Epoc
$tmpDays=$days+1;//If passed (timestamp < $dayInSeconds), it will return 0, so add 1
$monthsInDays=array();//Months will be in here ***Taken from the PHP source code***
$month=11;//This will be the returned MONTH NUMBER.
$day;//This will be the returned day number.
while($tmpDays>=$daysInYear){//Start adding years to 1970
$year++;
if(isLeap($year)){
$tmpDays-=$daysInLYear;
}
else{
$tmpDays-=$daysInYear;
}
}
if(isLeap($year)){//The year is a leap year
$tmpDays--;//Remove the extra day
$monthsInDays=array(-1,30,59,90,120,151,181,212,243,273,304,334);
}
else{
$monthsInDays=array(0,31,59,90,120,151,181,212,243 ,273,304,334);
}
while($month>0){
if($tmpDays>$monthsInDays[$month]){
break;//$month+1 is now the month number.
}
$month--;
}
$day=$tmpDays-$monthsInDays[$month];//Setup the date
$month++;//Increment by one to give the accurate month
return $year.'-'.(($month<10)?'0'.$month:$month).'-'.(($day<10)?'0'.$day:$day);
}
function isLeap($y){
return (($y)%4==0&&(($y)%100!=0||($y)%400==0));
}
echo unixToIso8601($t);
بسیار ممنون الان تبدیلش میکنم و تستش میکنم.
pawn در چه سیستم عامل هایی نصب می شود؟ امکان استفاده از کد های دیگر زبان ها وجود ندارد؟ یا اجرای دستورات معقول که در سیستم عامل اجرا می شوند؟
در تمام سیستم عامل ها اجرا میشه ولی متسفانه زبان Scripting یک نرم افزار هست و دسترسی به اجرای دستورات سیستم عامل نداره.
lizard.tiny
September 15th, 2016, 15:40
مشکل اینه که کل اطلاعات رو ندارم، از سمت کلاینت اطلاعات میاد که همون موقع باید پردازش بشه.
اگه از سمت کلاینت میاد و اون فایل php شبیه به یک سیستم api عمل میکنه بهتره دریافت و خروجی فایل php بصورت json یا xml باشه هم استانداردتر هست هم سرعت بهتری خواهی داشت
در کل اصولی تر هست
TATSERVER.NET
September 15th, 2016, 16:05
$t=time();
/*
* Transform a Unix Timestamp to ISO 8601 Date format YYYY-MM-DD
* @param unix timestamp
* @return Returns a formated date (YYYY-MM-DD) or false
*/
function unixToIso8601($timestamp){
if($timestamp<0){return false;}//Do not accept negative values
/* Too many constants, add this to a class to speed things up. */
$year=1970;//Unix Epoc begins 1970-01-01
$dayInSeconds=86400;//60secs*60mins*24hours
$daysInYear=365;//Non Leap Year
$daysInLYear=$daysInYear+1;//Leap year
$days=(int)($timestamp/$dayInSeconds);//Days passed since UNIX Epoc
$tmpDays=$days+1;//If passed (timestamp < $dayInSeconds), it will return 0, so add 1
$monthsInDays=array();//Months will be in here ***Taken from the PHP source code***
$month=11;//This will be the returned MONTH NUMBER.
$day;//This will be the returned day number.
while($tmpDays>=$daysInYear){//Start adding years to 1970
$year++;
if(isLeap($year)){
$tmpDays-=$daysInLYear;
}
else{
$tmpDays-=$daysInYear;
}
}
if(isLeap($year)){//The year is a leap year
$tmpDays--;//Remove the extra day
$monthsInDays=array(-1,30,59,90,120,151,181,212,243,273,304,334);
}
else{
$monthsInDays=array(0,31,59,90,120,151,181,212,243 ,273,304,334);
}
while($month>0){
if($tmpDays>$monthsInDays[$month]){
break;//$month+1 is now the month number.
}
$month--;
}
$day=$tmpDays-$monthsInDays[$month];//Setup the date
$month++;//Increment by one to give the accurate month
return $year.'-'.(($month<10)?'0'.$month:$month).'-'.(($day<10)?'0'.$day:$day);
}
function isLeap($y){
return (($y)%4==0&&(($y)%100!=0||($y)%400==0));
}
echo unixToIso8601($t);
تابعی که تبدیلش کردم به همون زبان:
خروجی Day و Month صحیح هست ولی Year رو 46 نشون میده!
T.Toosi
September 15th, 2016, 16:11
$year=1970;//Unix Epoc begins 1970-01-01
مقدار دهی کردید ؟
TATSERVER.NET
September 15th, 2016, 16:12
$year=1970;//unix epoc begins 1970-01-01
مقدار دهی کردید ؟
اوه حواسم نبوده یادم رفته :d
بسیار ممنون از کمکتون، درست شد!
lizard.tiny
September 15th, 2016, 16:25
این رو هم یه تست بزنید : http://code.ltiny.ir/?paste=32
TATSERVER.NET
September 15th, 2016, 16:30
این رو هم یه تست بزنید : http://code.ltiny.ir/?paste=32
ممنون از کمکتون ولی با اون تابعی که دوست عزیز T.Toosi ارائه دادند روی خود سیستم تبدیل رو انجام میدم.