سلام
@hesammousavi
من یه دیتاپکر دارم شمسی هست
میخوام زمانی که توی دیتابیس ثبت میشه به صورت میلادی باشه نه شمسی
باید چیکار کنم
با سلام
از پکیج ورتا استفاده کنید , قابلیت تبدیل شمسی به میلادی و میلادی به شمسی رو داره
لینک پکیج
برای نمایش تاریخ به صورت میلادی، از دستور زیر استفاده کنید
return $v->DateTime()->format('Y-m-d H:i:s'); // 2017-05-23 23:21:02
return $v->formatGregorian('Y-m-d H:i:s'); // 2017-05-23 23:21:02
چطور وردیمو بدم بهش- وردی تاریخ شمسی رو بدم بهش که تبدیل کنه به میلادی بزار داخل دیتابیس
@sajad.kazemi1993
شما اون تاریخی که به صورت شمسی از کاربر دریافت میکنی رو تو دستور زیر مقدار دهی کن
Verta::getGregorian(تاریخ دریافتی از کاربر)
سپس خروجی این دستور رو میتونید تو دیتابیس ذخیره کنید
به صورت زیر نوشتم توی کنترلرstore
'Expiration_date' =>Verta::getGregorian($request->datex)
اما خطای زیر رو میده
Too few arguments to function Hekmatinasser\Verta\Verta::getGregorian(), 1 passed in
@AmirArdakani
نوع فرمت ورودی من به صورت زیر هست
1397-04-20
بعدش دستور زیر به صورت زیر ورودی و خروجی رو صادر می کنه
return Verta::getGregorian(1394,10,4); // [2015,12,25]
میخوام به جای ویرگول خطه تیره باشه
فک کنم بخاطر همینه که خطا میده
بایدچیکار کنم
سلام، منظور از ویرگول اینه که یه ارایه میتونی بدی
حالا با استرینگ های لاراول تاریخ رو درست کن مثه کد زیر
str_replace('-', ',', '1397-03-29')
@juza666
@hesammousavi
به صورت زیر نوشتم
'Expiration_date' =>Verta::getGregorian(str_replace(',', '-', $request->datex))
خطای زیر رو داد
Too few arguments to function HekmatinasserVertaVerta::getGregorian(), 1 passed in
بله کاری نداره از تابع toGregorian
morlilog استفاده کن
https://github.com/morilog/jalali
مثالشم زده قشنگ
@tabeshr
مشکل من اینه که عدد ورودی فارسیه
باید به انگلیسی تبدیل کنم
به صورت زیر نوشتم داخل کنترلر ولی فقط سال رو تبدیل می کنه روز و ماه رو تبدیل نمی کنه
public function store(Request $request){
request()->validate([
'matn' => 'required',
'datex' => 'required'
]);
$persian = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];
$arabic = ['٩', '٨', '٧', '٦', '٥', '٤', '٣', '٢', '١','٠'];
$num = range(0, 9);
$convert = str_replace($persian, $num, $request->datex);
list($year, $month, $day) = explode('-', $convert);
$user=Post::create([
'menu_id'=> $request->name,
'user_id'=>auth()->user()->id,
'body'=>$request->matn,
'Expiration_date' =>Verta::getGregorian($year, $month, $day)
]);
session()->flash('message' , 'اطلاعات با موفقیت درج گردید');
return redirect()->route('article.add');
}
@Arshavir
من این مشکل رو به روش زیر تونستم حلش کنم.
چون Datepicker اعدادی فارسی رو تولید میکنه باید اول به اعداد انگلیسی تبدیلش کنیم. (به روش زیر)
public static function convert_numbers($input)
{
$persian = array('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹');
$english = array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
$string = str_replace($persian, $english, $input);
return $string;
}
فانکشن زیر هم تاریخ شمسی رو به میلادی تبدیل میکنه...
public static function jalali_to_gregorian($jy, $jm, $jd, $mod = '')
{
if ($jy > 979) {
$gy = 1600;
$jy -= 979;
} else {
$gy = 621;
}
$days = (365 * $jy) + (((int)($jy / 33)) * 8) + ((int)((($jy % 33) + 3) / 4)) + 78 + $jd + (($jm < 7) ? ($jm - 1) * 31 : (($jm - 7) * 30) + 186);
$gy += 400 * ((int)($days / 146097));
$days %= 146097;
if ($days > 36524) {
$gy += 100 * ((int)(--$days / 36524));
$days %= 36524;
if ($days >= 365) $days++;
}
$gy += 4 * ((int)(($days) / 1461));
$days %= 1461;
$gy += (int)(($days - 1) / 365);
if ($days > 365) $days = ($days - 1) % 365;
$gd = $days + 1;
foreach (array(0, 31, ((($gy % 4 == 0) and ($gy % 100 != 0)) or ($gy % 400 == 0)) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) as $gm => $v) {
if ($gd <= $v) break;
$gd -= $v;
}
return ($mod === '') ? array($gy, $gm, $gd) : $gy . $mod . $gm . $mod . $gd;
}
بعدش به راحتی میتونید به صورت زیر تاریخ شمسی رو به میلادی تبدیل کنید (البته با اعداد انگلیسی)
$gam_date_held = StringController::convert_numbers($request->input('gam_date_held'));
$persian_date = explode("-", $gam_date_held);
$year = $persian_date[0];
$month = $persian_date[1];
$day = $persian_date[2];
$main_date = StringController::jalali_to_gregorian($year, $month, $day, '-') . ' ' . $request->input('gam_time_held') . ':' . '00';
سلام
پکیج زیر واقعا عالیه من تمام این تبدیل های تاریخ رو با این پکیج انجام میدم
http://morilog.ir/jalali-shamsi-date-for-laravel-5/
createCarbonFromFormat($format, $jalaiTimeString)
$Jalalian = '1394/11/25 15:00:00';
// get instance of \Carbon\Carbon
$carbon = \Morilog\Jalali\CalendarUtils::createCarbonFromFormat('Y/m/d H:i:s', $Jalalian);
@Arshavir
سلام.مشکل از اونجایی هست که شما داری یه آرگومان از سه آرگومان مورد نیاز متد getGregorian رو بهش میدی. برای اینکه بتونی از این متد استفاده کنی باید سال و ماه و روز رو از هم جدا کنی و توی آرگومان های این متد جایگذاری کنی
getGregorian($year,$month,$day)
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟