PDA

View Full Version : سوال: نمایش زمان های بین دو تاریخ



ravand
دوشنبه 02 شهریور 1394, 17:09 عصر
برنامه ای نوشتید که تاریخ های بین دو تاریخ رو نمایش بده؟
مثلا
از تاریخ
1394/06/24
تا تاریخ:
1394/07/01
رو پشت سر هم چاپ کنه
من یه میلادیش رو گیر اوردم ولی شمسی رو نه.
من امدم از این برنامه استفاده کردم:

<?phpfunction getDatesFromRange($start, $end) {
$interval = new DateInterval('P1D');

$realEnd = new DateTime($end);
$realEnd->add($interval);

$period = new DatePeriod(
new DateTime($start),
$interval,
$realEnd
);

foreach($period as $date) {
$array[] = $date->format('Y/m/d');

}
foreach($array as $tarikh) {
echo($tarikh) ."<br/>";
}

return $array;
}
getDatesFromRange('1394/06/24', '1394/06/31');
?>


ولی یه همچین خروجی به ما میده:

1394/06/24
1394/06/25
1394/06/26
1394/06/27
1394/06/28
1394/06/29
1394/06/30
1394/07/01


به جای 31 شهریور میده 1 مهر.
متشکرم.

blue.web9
دوشنبه 02 شهریور 1394, 19:19 عصر
سلام من همیشه شمسی به میلادی تبدیل میکنم بعد محاسبه میکنم ، فکر میکنم به همین دلیل واسه شما درست کار نمیکنه
این تابع به درستی کار میکنه


require 'jdf.php';

function getRangeDate( $startDate , $endDate )
{
list($year , $month , $day ) = explode('/', $startDate);
$startDate = jalali_to_gregorian($year , $month , $day);
$startDate = implode('-', $startDate);
$sDate = new DateTime($startDate);

list($year , $month , $day ) = explode('/', $endDate);
$endDate = jalali_to_gregorian($year , $month , $day);
$endDate = implode('-', $endDate);
$eDate = new DateTime($endDate);

$diff = $eDate->diff( $sDate );
$dif_number = $diff->format('%a');

$array = array();
for( $i = 0 ; $i <= $dif_number ; $i++ ){
$date = date('Y-m-d', strtotime('+' . $i . ' day' , strtotime( $startDate ) ) );
list( $year , $month , $day ) = explode( '-' , $date );
$array[$i] = implode('/', gregorian_to_jalali($year, $month , $day));


}

foreach( $array as $i => $date )
{
list($year , $month , $day ) = explode('/', $date );
$tmp = array(
$year ,
strlen($month) == 1 ? '0'.$month : $month ,
strlen($day) == 1 ? '0'.$day : $day
);
$array[$i] = implode('/',$tmp );
}

return $array;
}

print_r(getRangeDate( '1394/06/24', '1394/06/31'));

ravand
دوشنبه 02 شهریور 1394, 19:47 عصر
ممنون خیلی خوب بود. ولی چرا تاریخ 1394/07/01 رو اینطوری چاپ میکنه؟ 1394/7/1
راهی براش نیست؟

blue.web9
دوشنبه 02 شهریور 1394, 21:59 عصر
پست قبل ویرایش کردم و 0 بهش اضافه کردم.

ravand
دوشنبه 02 شهریور 1394, 22:29 عصر
اینی که من نوشتم از اینی که شما نوشتی خیلی ساده تره صفر هم داره :لبخند:

<?php
include("jdf.php");
$star="1394/05/27";
$en="1394/06/01";
$star = explode('/', $star);
$start = jalali_to_gregorian($star[0] , $star[1] ,$star[2] ,'/');
$en = explode('/', $en);
$end = jalali_to_gregorian($en[0] , $en[1] ,$en[2] ,'/');
$interval = new DateInterval('P1D');
$realEnd = new DateTime($end);
$realEnd->add($interval);
$period = new DatePeriod(
new DateTime($start),
$interval,
$realEnd
);
foreach($period as $date) {
$array[] = $date->format('Y-m-d');
}
foreach($array as $tarikh) {
$tarikh=strtotime($tarikh);
echo jdate('Y-m-d',$tarikh)."<br/>";
}
?>