shahriar
4 سال پیش توسط shahriar مطرح شد
9 پاسخ

تبدیل میلادی به شمسی

سلام دوستان
چجوری میتونم createdat رو به شمسی تبدیل کنم؟


ثبت پرسش جدید
saman
@saman1111 4 سال پیش مطرح شد
0

سلام
از یه پکیج تاریخ شمسی مثل Verta استفاده کنید
داکیومنتشون توضیح داده روش کار رو


shahriar
تخصص : learning .....
@shahriar 4 سال پیش مطرح شد
0

هم از morilog استفاده کردم هم از verta ولی باز هم تاریخ میلادی بر گردوند اگه میشه یکم کامل تر توضیح بدید


محسن بستان
تخصص : Senior Backend Developer
@mohsenbostan 4 سال پیش مطرح شد
saman
@saman1111 4 سال پیش مطرح شد
0

@mariomesto12

    public function getCreatedAtAttribute($value) {
        return (new Verta($value));
    }

در صورت استفاده از Verta این متد رو توی مدل مربوطه اضافه کنید.


shahriar
تخصص : learning .....
@shahriar 4 سال پیش مطرح شد
0

@saman1111

       $created_at = Article::getCreatedAtAttribute(Article::CREATED_AT);

        Article::create([
            'title' => $validate_data['title'],
            'slug' => $validate_data['slug'],
            'content' => $validate_data['content'],
            'category' => $validate_data['category'],
         'created_at' => $created_at
         //   'article_image_path' => 'storage/app/Articlephotos/'.$filename,

        ]);

ارور داد

Unknown datetime 'created_at' 

کجا رو دارم اشتباه میرم؟


saman
@saman1111 4 سال پیش مطرح شد
0

@mariomesto12
اون خط اول رو اصلا نیاز نیست
وقتی اون رو توی مدل اضافه کنی اصن دیگه نیاز نیست این کار رو انجام بدی
فقط این کار رو بکن

$article = Article::find(1);
return $article->created_at;

خودش created_at رو تبدیل میکنه و برمیگردونه
حالا من اینطوری برای مثال نوشتم که ریترنش کنه. هرجای دیگه میتونی از همین created_at استفاده کنی


shahriar
تخصص : learning .....
@shahriar 4 سال پیش مطرح شد
0

متوجه نشدم :(
خب من الان اگه از find استفاده کنم که create رو بردم زیر سوال 😣😣


saman
@saman1111 4 سال پیش مطرح شد
0

@mariomesto12
جان ؟ created_at رو بردین زیر سوال ؟
چه ربطی داره خب created_at یه فیلد دیتابیسه که ذخیره شده
شما با find یک سطر رو دریافت میکنین و بعد فیلد created_at اون رو استفاده می کنید.

منظورتون عمل create کردن هست ؟ منظورتون رو نمیفهمم


مهدی عقیقی
تخصص : برنامه نویس وب
@MehdiAghighi 4 سال پیش آپدیت شد
1

@mariomesto12 سلام وقتتون بخیر.

ببینید شما برای این که تاریخ میلادی رو به شمسی تبدیل کنید همون‌طور که دوستمون گفتن باید از پکیجی مثل Verta استفاده کنید. حالا برای این که تاریخ شمسی رو موقعی که modelی رو دریافت می‌کنید داشته باشید، می‌تونید کارای زیر رو بکنید.

یکیش همین متود پایینه:

public function getCreatedAtAttribute($value) {
        return (new Verta($value));
    }

خب حالا این متود چی‌کار می‌کنه ؟!

  • از این به بعد هر مدلی رو دریافت کنید ( فرقی نمی‌کنه با find یا findOrFail یا ... )، مقدار createdat به جای تاریخ میلادی میشه تاریخ شمسی.
    یعنی مثلا مثال زیر رو ببینید.
$article = Aritcle::findOrFail($id)

$article->created_at

اون created_at که من از $article گرفتم، دقیقا همون مقداری که تابع getCreatedAtAttribute بر می‌گردونه رو به شما میده. یعنی شما اگر داخل اون تابع مثلا استرینگ test رو برگردونی تو همه‌ی مدل‌ها اون created_at میشه test.

حالا بعضی موقع‌ها شاید با خودتون بگید که من می‌خوام هر وقت مدلی رو دریافت کردم هم تاریخ میلادی رو داشته باشم هم تاریخ شمسی.
برای این کار باید createdat رو بزارید باشه و یه کار دیگه کنید.

  • توی مدلتون یه فانکشن مثل همون تعریف کنید فقط با یه اسم دیگه. مثلا getCreatedAtShamsiAttribute که این مقدار شمسی تاریخ رو برگردونه یعنی مثلا:

public function getCreatedAtShamsiAttribute() {  
return new Verta($this->created_at)  
}

اینجا متغیر $this میشه اون مدلی که دریافت میشه.
حالا از الان به بعد هر وقت این تابع رو صدا کنید می‌تونید مقدار createdatshamsi رو بگیرید.

اگر با خودتون می‌گید که نمی‌خواید هر دفعه این تابع رو صدا کنید و یا می‌خواید به عنوان attribute بهش دسترسی داشته باشید، یک متغیر $appends باید تعریف کنید داخل مدل که برابر با یک آرایه‌ست و attribute هایی که می‌خواید مستقیم به خود مدل اضافه بشن و فانکشنشون رو تعریف کردید این تو بزارید تو مثال ما میشه created_at_shamsi
پس نتیجه نهایی میشه این :


$appends =['created_at_shamsi']

public function getCreatedAtShamsiAttribute() {  
return new Verta($this->created_at)  
}

حالا اینطوری می‌تونید به تاریخ شمسی و میلادی دسترسی داشته باشید.


$article = Aritcle::findOrFail($id)

تاریخ میلادی  
$article->created_at

تاریخ شمسی  
$article->created_at_shamsi

فقط دقت کنید که موقعی که می‌خواید یک فیلد به دیتابیس اضافه کنید یا ... created_at رو باید تاریخ میلادی بدید حتما و created_at_shamsi رو هم اگر استفاده کردید نیاز نیست مقدار بهش بدید.


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

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