سلام
اقا من میخوام تاریخ توی دیتا بیس ذخیره کنم
شمسی که وارد میکنم که ارور میده میگه فرمت مناسب نیست توی لاراول احتمالا از نظر عددی چون کوچیکتره نسبت میلادی اینطوری میکنه وگرنه همون فرمت رو دقیقا میلادی یه عدد میدم مشکلی نداره ذخیره میکنه و کاملا خروجی و داده ارسالی رو چک کردم
حالا میخوام شمسیم رو میلادی کنم با کربن مشکل دارم
این رو خود سایت کربن گذاشته
$Jalalian = '1394/11/25 15:00:00';
// get instance of \Carbon\Carbon
$carbon = \Morilog\Jalali\CalendarUtils::createCarbonFromFormat('Y/m/d H:i:s', $Jalalian);
فرمت ارسال تاریخ :
"1400-01-29 12:20:00"
خطا:
{message: "Undefined index: year", exception: "ErrorException",…}
exception: "ErrorException"
file: "C:\Users\kuzey\Desktop\babahaji\vendor\morilog\jalali\src\CalendarUtils.php"
line: 756
message: "Undefined index: year"
trace: [{file: "C:\Users\kuzey\Desktop\babahaji\vendor\morilog\jalali\src\CalendarUtils.php", line: 756,…},…]
اگر کدی دارید برای morilag/jalalli که شمسی به میلادی و میلادی به شمسی رو با این فرمت تبدیل میکنه ممنون میشم قرار بدید
@salar.mohammad2013 سلام
باید - بزاری
کد را اصلاح کردم
$Jalalian = '1394-11-25 15:00:00';
// get instance of \Carbon\Carbon
$carbon = \Morilog\Jalali\CalendarUtils::createCarbonFromFormat('Y-m-d H:i:s', $Jalalian);
تاریخ رو همیشه به صورت میلادی در دیتابیس ذخیره کنید تا بعدا برای انجام محاسبه روشون راحت باشین
برای تبدیل تاریخ میلادی به شمسی و برعکس هم کلی پکیج هست
پکیج ورتا
پکیج جلالی
اره با موریلاگ جلالی اومدم کار کنم
الان برای تعداد فاصله های بین اون فرمت هم گیر میده
و این که تاریخ 1400/1/2 مثلا چون ماه و روز دو رقمی نیست هم گیر میده صفر پشتشون مهمه
از strtotime استفاده کردم برای درست کردن فرمت خودم
به هر شکلی بهش بدی تایم استمپ میده و با متد date با هر فرمتی خواستی در میاریش
چون توی ویو با فرمت مناسب ارسال نمیشده برام
حتی ساعت و تاریخ رو جابه جا میدم و ماه رو هم بدون صفر و با هر تعداد فاصله ی بینشون ، خروجی فرمت مناسبی هست که میشه توی موریلاگ جلالی مثلا استفادش کرد
امیدوارم بدردتون بخوره
$time=date('Y-m-d H:i',strtotime("12:20 1400/1/27"));
//out put "1400-01-27 12:20"
@salar.mohammad2013
برای اون مورد که میگی دو رقمی نیستن خیلی راح میتونی از کدی که زیر نوشتم استفاده کنی و بر اساس نیاز خودت تغییرش بدی
من با verta کار کردم
$date_ex = explode('-', $request->end_date);
$vert = Verta::getGregorian($date_ex[0], $date_ex[1], $date_ex[2]);
if (strlen($vert[1]) == 1) {
$month = '0' . $vert[1];
} else {
$month = $vert[1];
}
if (strlen($vert[2]) == 1) {
$day = '0' . $vert[2];
} else {
$day = $vert[2];
}
$myDate = $vert[0] . '-' . $month . '-' . $day . ' 23:59:59';
داداش به جای این سیزده خط کد strtotime رو گذاشتم دیگه
به هر فرمتی بدی خروجی اوکیه
نمونش ببین ته پیامم
بازم دمت گرم داداش
به عنوان صرفا توصیه و تجربه میگم، ذخیره کردن تاریخ غیر میلادی ، توی دیتا بیس باعث مشکلات آینده میتونه بشه.
شما به نظرم صرفا یه فانکشن برای تبدیل تاریخ میلادی حالا تاریخ شمسی داشته باشید
پکیج ورتا هم من استفاده کردم
پکیج جلالی و ...
همشون هم اوکین.
باز هر جور مایلید
در ابتدا بگم که کاملا حرف شما درسته و تاییدش میکنم @eghbal1377
متاسفانه من منظورم رو بد رسوندم و سو تفاهم شده
قصد جسارت نبوده
تاریخ رو طبق گفته ی شما به میلادی ذخیره کردم و تصمیم همین بود
ولی داده ای ک از سمت کاربر میاد تاریخ شمسی فرمت مناسبی نداشت
دلیلشم اینه ک من از یک dateTimePicker استفاده کردم که ساعت و تاریخ رو با هم داره
ومن ب صورت پیشفرض با استفاده از یک کتابخونه javascript ساعت جاری سیستم رو از میلادی به شمسی تبدیل میکنم توش قرار میدم مثل تصویر زیر ولی خروجی اون تابع میلادی به شمسی عدد رو یک رقمی بهم میده
اگر کاربر تاریخ انتخاب نکنه پیشفرض یک رقمی هست
اگر انتخاب کنه دو رقمی میشه
حالا خروجی ای هم که از val() این input میگیرم به خاطر rtl بودنو این بحثای فرونت برعکس میاد توی کنترولر یعنی اول ساعت میاد بعد تاریخ که ممکنه یک رقمی باشه یا دو رقمی
من حرفی که زدم سر کد شما این بود که برای دو رقمی کردن و قرار دادن اون تاریخ شمسی دریافت شده از ورودی به یک فرمت مناسب برای تبدیلش به میلادی از strtotime استفاده کردم
کد خودم به شکل زیر هست و از morilog/jalali برای تبدیل شمسی به میلادی و ذخیره اطلاعات استفاده کردم
و ب نظرم نسبت به کدی که ارسال کردید برای تبدیل به میلادی و تغییر فرمت نا مناسبش کوتاه تر و قابل فهم تر بود
واسه همین گفتم به جای سیزده خط کد این ب نظرم بهتره
با حرف شما که گفتید میلادی ذخیره بشه مخالفت نکردم
$time=date('Y-m-d H:i',strtotime($request->created_at));
$carbon = \Morilog\Jalali\CalendarUtils::createCarbonFromFormat('Y-m-d H:i',$time)->format('Y-m-d H:i');
$all_data=$request->all();
$all_data['created_at']=$carbon;
if ($request->customer_id){
$order=auth()->user()->orders()->create($all_data);
}else if($request->newCustomer) {
$customer=Customer::create($request->newCustomer);
// $data=$request->all();
$all_data['customer_id']=$customer->id;
$order=auth()->user()->orders()->create($all_data);
}else{
$order=auth()->user()->orders()->create($all_data);
}
در دیتا بیس هم به صورت زیر میبینید ک میلادی ذخیره شده
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟