راکت

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

9 پاسخ

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

shahriar
shahriar
@shahriar
ثبت پرسش جدید

پاسخ‌ها

9
saman
saman
@saman1111

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

shahriar
shahriar
@shahriar

تخصص: learning .....

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

شاید پاسخ شما همین‌جا باشد

محسن بستان
محسن بستان
@mohsenbostan

تخصص: Senior Backend Developer

saman
saman
@saman1111

@mariomesto12

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

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

shahriar
shahriar
@shahriar

تخصص: learning .....

@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
saman
@saman1111

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

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

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

shahriar
shahriar
@shahriar

تخصص: learning .....

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

saman
saman
@saman1111

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

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

مهدی عقیقی
مهدی عقیقی
@MehdiAghighi

تخصص: برنامه نویس وب

@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 رو هم اگر استفاده کردید نیاز نیست مقدار بهش بدید.

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

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