PDA

View Full Version : سوال: جلو بردن زمان بدون احتساب 29 و 31 روز



ali.motevali67
دوشنبه 21 اردیبهشت 1394, 21:07 عصر
چجوری میشه تاریخ رو چند ماه جلوتر برد بدون احتساب 29 یا 31 یا 30 روز بودن؟فرض کنید من میخوام 30 ماه تاریخو جلو ببرم و به خورشیدی تبدیل کنم بدون اون شرایط؟

colors
دوشنبه 21 اردیبهشت 1394, 21:46 عصر
سلام
میتونید از تابع strtotime به صورت زیر استفاده کنید:



$new_time = strtotime('+1 day'); // یک روز بعد

$new_time = strtotime('-1 day'); // یک روز قبل

$new_time = strtotime('+1 week'); // یک هفته بعد

$new_time = strtotime('+1 month'); // یک ماه بعد

$new_time = strtotime('+30 month'); // سی ماه بعد

$new_time = strtotime('+1 year'); // یک سال بعد

ali.motevali67
دوشنبه 21 اردیبهشت 1394, 22:36 عصر
مشکل اینجاست که از همین الان میخوام اینکار رو بکنم؟متوجه منظورم شدید؟دو تا فیلد برای زمان تو دیتابیس باشه یکی تاریخ الان یکی تاریخ 21 ماه دیگه .حالا تو هر ماه زمان و ماه و سالی میخواد باشه؟

us1234
دوشنبه 21 اردیبهشت 1394, 22:43 عصر
مشکل اینجاست که از همین الان میخوام اینکار رو بکنم؟متوجه منظورم شدید؟دو تا فیلد برای زمان تو دیتابیس باشه یکی تاریخ الان یکی تاریخ 21 ماه دیگه .حالا تو هر ماه زمان و ماه و سالی میخواد باشه؟

جواب colors کاملا صحیح است .


شما هر زمان که باشید می توانید با تابع strtotime می توانید زمان را جلو یا عقب ببرید .

زمان فعلی :


time();

زمان فعلی + 21 ماه


$new_time = strtotime('+21 month');

ali.motevali67
سه شنبه 22 اردیبهشت 1394, 03:11 صبح
شما الان که سه شنبه هستیم شما تاریخو 21 ماه ببر جلو ببین که چند روز کمتر نشون میده.من میخوام این مشکل روز اش بر طرف بشه

us1234
سه شنبه 22 اردیبهشت 1394, 08:54 صبح
شما الان که سه شنبه هستیم شما تاریخو 21 ماه ببر جلو ببین که چند روز کمتر نشون میده.من میخوام این مشکل روز اش بر طرف بشه

شما می خواهید یک عدد ثابت به ماه اضافه کنید :


$newY = floor( 21 / 12);
$newM = date('m')+( 21 % 12) ;
if( $newM > 12)
{
$newY++ ;
$newM -= 12 ;
}
$res= date('Y')+$newY.'-'.$newM.'-'.date('d');
echo strtotime($res);

MMSHFE
سه شنبه 22 اردیبهشت 1394, 09:44 صبح
شما الان که سه شنبه هستیم شما تاریخو 21 ماه ببر جلو ببین که چند روز کمتر نشون میده.من میخوام این مشکل روز اش بر طرف بشه

دوست عزیز، معلوم نیست 21 ماه دیگه، این روز از ماه که الان داخلش هستیم، باز هم سه شنبه باشه. دقت کنید که تعداد روزهای ماه مضرب 7 نیست که 21 ماه دیگه، روز هفته اش فرق نکنه.

ali.motevali67
سه شنبه 22 اردیبهشت 1394, 14:24 عصر
ببینید من میخوام زمانی که تاریخ رو چند ماه جلوتر میبریم زمانی که بعضی از ماه ها 31 روز و 29 و یا 30 روز هستند اختلاف این زمان ها محاسبه نشه و همه یکسان باشند و همه یک ماه مساوی باشند این تابع strtotime میاد اختلاف این روز های کم و زیاد شده رو محاسبه میکنه که یک ماه 29 روز هست و یک ماه 31 روز.من میخوام همه ماهها چه 31 روز چه 29 روز چه 30 روز باشن همه یکی محاسبه باشن

MMSHFE
سه شنبه 22 اردیبهشت 1394, 14:28 عصر
خوب پس نگین میخواین 21 ماه جلوتر ببرین. باید بگین میخواین 21 بار 30 روز بهش اضافه کنید. خوب میتونید از هرکدوم از این دو روش استفاده کنید:

$newTime = strtotime('+630 days');


$newTime = time() + 630 * 86400; // 86400 = seconds of a day

ali.motevali67
سه شنبه 22 اردیبهشت 1394, 15:06 عصر
نه خب من میخوام هر زمانی که بهش دادم 21 ماه بره جلو.یعنی تاریخ 21ماه جلو بردن زمان ثابت نیست شاید الان باشه شاید یک ماه دیگه شاید سه ماه دیگه.چجوری میشه همچین مشکلی رو بر طرف کرد؟ممنون

MMSHFE
سه شنبه 22 اردیبهشت 1394, 15:09 عصر
من فرمول رو بهتون دادم. دیگه بقیه اش رو باید خودتون بتونید انجام بدین. کافیه بجای عدد ثابت 21 که من گذاشتم عدد دلخواه خودتون رو بگذارین. 630 حاصلضرب 21 در 30 هست.

ali.motevali67
سه شنبه 22 اردیبهشت 1394, 15:35 عصر
چرا 21 در 30؟اینجوری بگم بهتره.این برنامه سربازی هست.از زمان شروع خدمت سرباز باید 21 ماه خدمت کنه.ماهش چه 29 روز باشه چه 31 روز باشه و چه 30 روز باشه.وزمان پایان سربازیش محاسبه میشه.حالا روش محاسبش چجوری میشه؟ممنون

MMSHFE
سه شنبه 22 اردیبهشت 1394, 15:44 عصر
در این صورت چون ماههای ما با ماههای میلادی تفاوت دارن توی روزها، باید با کمک کتابخانه هایی مثل JDF تعداد روزهای ماههایی که بین تاریخ شروع و پایان هست رو محاسبه کنید و به همون تعداد، روز اضافه کنید.

hamedarian2009
سه شنبه 22 اردیبهشت 1394, 17:05 عصر
دوست گرامی این کاری نداره یک از الزامات برنامه نویسی اینه که سیستم رو خوب بشناسید و تجزیه و تحلیل کنید شما اول برید ببینید خود نطام وظیفه به صورت دستی چجوری حساب میکنه حتما یک فرمولی دارن دیگه همون فرمول رو تو برنامتون به کار ببرید نجوه افزودن به تاریخ رو هم که دوستان گفتن

ali.motevali67
سه شنبه 22 اردیبهشت 1394, 22:29 عصر
من که بهتون گفتم چی میخوام.21ماه زمان رو ببرید جلو بدون محاسبه 29 روز و 31 روز 30 روز سال.از تابع gerigorian_to_jalali هم استفاده کردم نشد.راهی به ذهنتون نمیرسه؟

prans.info
سه شنبه 22 اردیبهشت 1394, 23:19 عصر
سلام
فکر کنم چیزی که میخواید این تابع باشه که براتون نوشتم : :لبخند:


<?php
function getNextTime ($plus,$year,$month,$day)
{
$num = 0;
while ($num<$plus)
{
if($month==12)
{
$month = 0;
$year++;
}
$month++;
$num++;
}
if($month==0)
{
$month = 1;
}
if($month==12 and ($day==30 or $day==31))
{
$day = 29;
}else if($month<6 and $day==31)
{
$day = 30;
}
return ($year.'/'.$month.'/'.$day);
}
echo getNextTime (21,1394,2,24);

MMSHFE
چهارشنبه 23 اردیبهشت 1394, 09:36 صبح
براتون یه تابع نوشتم و توی بخش Snippetهای PHP گذاشتم چون احساس کردم ممکنه بدرد خیلیها بخوره. تابع رو هم بصورتی نوشتم که انعطاف پذیری مناسبی توی کارها به شما بده.

لینک: http://barnamenevis.org/showthread.php?215150-snippet-%D9%87%D8%A7%DB%8C-php&p=2212362&viewfull=1#post2212362