محمد رضا
4 سال پیش توسط محمد رضا مطرح شد
8 پاسخ

ذخیره تاریخ در لاراول

سلام
اقا من میخوام تاریخ توی دیتا بیس ذخیره کنم
شمسی که وارد میکنم که ارور میده میگه فرمت مناسب نیست توی لاراول احتمالا از نظر عددی چون کوچیکتره نسبت میلادی اینطوری میکنه وگرنه همون فرمت رو دقیقا میلادی یه عدد میدم مشکلی نداره ذخیره میکنه و کاملا خروجی و داده ارسالی رو چک کردم
حالا میخوام شمسیم رو میلادی کنم با کربن مشکل دارم
این رو خود سایت کربن گذاشته

$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 که شمسی به میلادی و میلادی به شمسی رو با این فرمت تبدیل میکنه ممنون میشم قرار بدید


ثبت پرسش جدید
نوب
تخصص : کدنویس نوب :)
@yk5742g 4 سال پیش مطرح شد
1

@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);

محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 4 سال پیش آپدیت شد
0

دستت درد نکنه
هیچوقت با این فرمت های تاریخ حال نکردم


میلاد هدایت پور
تخصص : در حال پیشرفت
@miladparsi1070 4 سال پیش مطرح شد
2

تاریخ رو همیشه به صورت میلادی در دیتابیس ذخیره کنید تا بعدا برای انجام محاسبه روشون راحت باشین
برای تبدیل تاریخ میلادی به شمسی و برعکس هم کلی پکیج هست
پکیج ورتا
پکیج جلالی


محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 4 سال پیش مطرح شد
0

اره با موریلاگ جلالی اومدم کار کنم
الان برای تعداد فاصله های بین اون فرمت هم گیر میده
و این که تاریخ 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"

نوب
تخصص : کدنویس نوب :)
@yk5742g 4 سال پیش مطرح شد
0

@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';

محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 4 سال پیش مطرح شد
0

داداش به جای این سیزده خط کد strtotime رو گذاشتم دیگه
به هر فرمتی بدی خروجی اوکیه
نمونش ببین ته پیامم
بازم دمت گرم داداش


Eghbal Shirasb
تخصص : طراح دیتابیس و متخصص backend a...
@eghbal1377 4 سال پیش مطرح شد
0

به عنوان صرفا توصیه و تجربه میگم، ذخیره کردن تاریخ غیر میلادی ، توی دیتا بیس باعث مشکلات آینده میتونه بشه.
شما به نظرم صرفا یه فانکشن برای تبدیل تاریخ میلادی حالا تاریخ شمسی داشته باشید
پکیج ورتا هم من استفاده کردم
پکیج جلالی و ...
همشون هم اوکین.
باز هر جور مایلید


محمد رضا
تخصص : Full Stack Developer
@salar.mohammad2013 4 سال پیش مطرح شد
0

در ابتدا بگم که کاملا حرف شما درسته و تاییدش میکنم @eghbal1377
متاسفانه من منظورم رو بد رسوندم و سو تفاهم شده
قصد جسارت نبوده
تاریخ رو طبق گفته ی شما به میلادی ذخیره کردم و تصمیم همین بود
ولی داده ای ک از سمت کاربر میاد تاریخ شمسی فرمت مناسبی نداشت
دلیلشم اینه ک من از یک dateTimePicker استفاده کردم که ساعت و تاریخ رو با هم داره
ومن ب صورت پیشفرض با استفاده از یک کتابخونه javascript ساعت جاری سیستم رو از میلادی به شمسی تبدیل میکنم توش قرار میدم مثل تصویر زیر ولی خروجی اون تابع میلادی به شمسی عدد رو یک رقمی بهم میده
تاریخ
اگر کاربر تاریخ انتخاب نکنه پیشفرض یک رقمی هست
اگر انتخاب کنه دو رقمی میشه
date2
حالا خروجی ای هم که از 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);
        }

در دیتا بیس هم به صورت زیر میبینید ک میلادی ذخیره شده
تایم


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام