PDA

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



engmmrj
شنبه 08 آذر 1393, 15:25 عصر
سلام
php برای بدست آوردن اختلاف دو تاریخ تابع داره ولی این تابع ها بصورت میلادی کار میکنند من به یک تابع احتیاج دارم که اختلاف رو شمسی بده .

$date1=date_create("1372-09-09");
$date2=date_create("1393-09-09");
$diff=date_diff($date1,$date2);
echo $diff->format("%Y");

thacker
شنبه 08 آذر 1393, 15:39 عصر
با استفاده از کلاس jdf تاریخ ها رو به رشته تبدیل کنید ، بعد اختلافش رو بدست بیارید و دوباره تبدیلش کنید

saadatieathar
شنبه 08 آذر 1393, 17:49 عصر
سلام.
منم این مشکل رو داشتم
این تابع روی هر تاریخی کار می کنه




function datediff($startDate, $endDate)
{
// Parse dates for conversion
$startArry = date_parse($startDate);
$endArry = date_parse($endDate);

// Convert dates to Julian Days
$start_date = gregoriantojd($startArry["month"], $startArry["day"], $startArry["year"]);
$end_date = gregoriantojd($endArry["month"], $endArry["day"], $endArry["year"]);

// Return difference
return round(($end_date - $start_date), 0);
}

engmmrj
شنبه 08 آذر 1393, 20:58 عصر
سلام.
منم این مشکل رو داشتم
این تابع روی هر تاریخی کار می کنه




function datediff($startDate, $endDate)
{
// Parse dates for conversion
$startArry = date_parse($startDate);
$endArry = date_parse($endDate);

// Convert dates to Julian Days
$start_date = gregoriantojd($startArry["month"], $startArry["day"], $startArry["year"]);
$end_date = gregoriantojd($endArry["month"], $endArry["day"], $endArry["year"]);

// Return difference
return round(($end_date - $start_date), 0);
}

اررو میده

Warning: date_parse() expects parameter 1 to be string, object given in C:\xampp\htdocs\test.php on line 9

Warning: date_parse() expects parameter 1 to be string, object given in C:\xampp\htdocs\test.php on line 10
0
از این دوتا

$startArry = date_parse($startDate);$endArry = date_parse($endDate);

engmmrj
یک شنبه 09 آذر 1393, 13:49 عصر
update .

hamidhassas
چهارشنبه 12 آذر 1393, 09:00 صبح
دوستان کسی نیست کمک کنه



$startDate="1393-09-01";
$endDate="1393-09-04";
function datediff($startDate, $endDate)
{
// Parse dates for conversion
$startArry = date_parse($startDate);
$endArry = date_parse($endDate);
// Convert dates to Julian Days
$start_date = gregoriantojd($startArry["month"], $startArry["day"], $startArry["year"]);
$end_date = gregoriantojd($endArry["month"], $endArry["day"], $endArry["year"]);
// Return differencereturn
round(($end_date - $start_date), 0);
}
echo datediff();

MMSHFE
چهارشنبه 12 آذر 1393, 10:12 صبح
function DateDifference($firstDate, $secondDate) {
require_once 'jdf.php';
list($fdY, $fdM, $fdD) = explode('-', $firstDate);
list($sdY, $sdM, $sdD) = explode('-', $secondDate);
$fts = jmktime(0, 0, 0, $fdM, $fdD, $fdY);
$sts = jmktime(0, 0, 0, $sdM, $sdD, $sdY);
$diff = $sts - $fts;
return round($diff / 86400);
}

$startDate = '1393-09-01';
$endDate = '1393-09-04';
echo DateDifference($startDate, $endDate); // output: 3
?>

hamidhassas
چهارشنبه 12 آذر 1393, 11:33 صبح
function DateDifference($firstDate, $secondDate) {
require_once 'jdf.php';
list($fdY, $fdM, $fdD) = explode('-', $firstDate);
list($sdY, $sdM, $sdD) = explode('-', $secondDate);
$fts = jmktime(0, 0, 0, $fdM, $fdD, $fdY);
$sts = jmktime(0, 0, 0, $sdM, $sdD, $sdY);
$diff = $sts - $fts;
return round($diff / 86400);
}

$startDate = '1393-09-01';
$endDate = '1393-09-04';
echo DateDifference($startDate, $endDate); // output: 3
?>
ممنون چطوری میتونم در jdf سه روز به تاریخ امروز اضافه کنم و یا 4 روز از تاریخ امروز کم کنم
این کدم

echo jstrftime('%Y/%m/%d','','','','en');// 1393/01/01 خروجی به حروف انگلیسی

MMSHFE
چهارشنبه 12 آذر 1393, 11:36 صبح
ربطی به JDF نداره. به ازای هر روز کافیه به timestamp موردنظر 86400 ثانیه اضافه یا کم کنید.

hamidhassas
چهارشنبه 12 آذر 1393, 11:44 صبح
من با کد زیر تاریخ رو نشون میدم میخوام کاری کنم که تاریخی که دریافت شده ی بار بهش 3 روز اضافه بشه و ی بار 4 روز ازش کم بشه بعد هر سه تاریخ امروز و آینده و گذشته رو زخیره کنم

echo jstrftime('%Y/%m/%d','','','','en');// 1393/01/01 خروجی به حروف انگلیسی

Taimaz_222
دوشنبه 31 فروردین 1394, 18:27 عصر
دوستان کسی هست توی این قضیه منو کمک کنه ؟؟؟؟

من کدای بالا رو اجرا میکنم درستند .

اما کاری که من می کنم اینه که مقداری که باید تفریق روش انجام بشه رو اینطوری می گیرم



$shamsi = jdate('Y-M-D');


بعد وقتی اینو بعنوان پارامتر به تابع ارسال می کنم مقدار خروجی نادرست است !!!! یه مقداری مثه 16484 این رو میده !!!

reza_alie
دوشنبه 31 فروردین 1394, 18:30 عصر
سلام


$now_date=jdate('Y/n/j');

اینو بنویس جواب میده

Taimaz_222
سه شنبه 01 اردیبهشت 1394, 10:06 صبح
نه متاسفانه اینم جواب نداد !

golbafan
سه شنبه 01 اردیبهشت 1394, 10:13 صبح
مشکل شما اینجاست که از توابع و متغیر های تاریخ میلادی داری برای اختلاف تاریخ شمسی استفاده میکنی
بهترین راه اینه که تاریخ ها رو بصورت میلادی و با همان استاندارد خودش ثبت کنید و محاسبه کنید و تنها برای نمایش دادن از تبدیل به شمسی استفاده بشه
هر راه دیگه ای که برید کاملا غیر استاندارده و ممکنه در جایی باگ هم ایجاد کنه

MMSHFE
سه شنبه 01 اردیبهشت 1394, 10:15 صبح
شما کافیه به ازای هر روز 86400 ثانیه به timestamp موردنظرتون اضافه یا ازش کم کنید. بعد میتونید با توابع jdate و... دوباره timestamp جدید رو به شکل دلخواه نمایش بدین.

Taimaz_222
سه شنبه 01 اردیبهشت 1394, 12:06 عصر
شما کافیه به ازای هر روز 86400 ثانیه به timestamp موردنظرتون اضافه یا ازش کم کنید. بعد میتونید با توابع jdate و... دوباره timestamp جدید رو به شکل دلخواه نمایش بدین.

با این توضیحاتی ک شما دارین میدین ینی درواقعاین تابع درست عمل نمیکنه !!!!!!!

خروجی که من توسط jdate دارم از این تابع میگیرم ی عددی برابراینه 16484 ، حالابرا اینکه تاریخ امروز 1394/02/01 رو بدست بیارم چندتا 86400 باید کسر بشه یا اضافه بشه !!؟؟؟؟

یا شایدم من منظور شما رو کامل نفهمیدم !

MMSHFE
سه شنبه 01 اردیبهشت 1394, 12:12 عصر
ببینید، اختلاف دو تاریخ رو که نمیشه دوباره بصورت تاریخ نشون داد (چون جواب، timestamp نیست و در اصل داره میگه اون دو تاریخ چند ثانیه با هم اختلاف دارن). شما باید اختلاف رو بصورت دستی به روز و ساعت و... تبدیل کنید. مثال:

$date1 = jmktime(0, 0, 0, 1, 1, 1394); // 1 farvardin 94
$date2 = jmktime(0, 0, 0, 1, 2, 1394); // 1 ordibehesht 94
$dateDiff = $date2 - $date1; // $dateDiff = 31 * 86400
اینجا خودتون باید dateDiff$ رو تقسیم بر 86400 کنید تا تعداد روزهای اختلاف مشخص بشه. بعد باقیمانده رو بر 3600 تقسیم کنید تا تعداد ساعتهای اختلاف تعیین بشه، به همین شکل دوباره باقیمانده رو بر 60 تقسیم کنید تا دقایق اختلاف رو مشخص کنید و درنهایت، باقیمانده آخر هم تعداد ثانیه های اختلاف رو تعیین میکنه.