laravel보기 페이지에서 날짜 형식 변경


94

데이터베이스에서 가져온 날짜 형식을 변경하고 싶습니다. 이제 2016-10-01 {{$user->from_date}}. laravel 5.3에서 'dmy'형식을 변경하고 싶습니다.

{{ $user->from_date->format('d/m/Y')}}

답변:


145

이 시도:

date('d-m-Y', strtotime($user->from_date));

날짜를 입력 한 d-m-Y형식 으로 변환합니다 .

참고 : 이 솔루션은 php 및 모든 프레임 워크에서 작동하는 일반적인 솔루션입니다. Laravel 특정 방법의 경우 Hamelraj에서 제공하는 솔루션을 사용해보십시오 .


2
@ user3386779 : 작동하지만 가장 아름다운 솔루션은 아닙니다. :) Laravel은이 작업을 수행하는 메커니즘이 거의 없습니다. 내 대답을 선택하면 한곳에서 날짜 형식을 설정해야하며 표시 from_date열 이 필요할 때마다 날짜 형식을 변경할 필요가 없습니다 .
Marek Skiba

@MarekSkiba 나는 :) 내 대답에 같은 일을 언급해야
Mayank Pandeyz

예를 들어 언어를 변경하려는 경우-> 'es'(달 이름)
Alberto Acuña

1
당신이 사용해야 @sadiq에 동의 $ 사용자 -> from_date-> 형식 ( 'D / M / Y')
에릭 라르손

1
위대하고 매우 간단한 솔루션.
Muddasir23

129

Laravel 사용에서 탄소 그것의 좋은

{{ \Carbon\Carbon::parse($user->from_date)->format('d/m/Y')}}

예, $ user-> from_date는 null언제입니까?
lewis4u

1
@ lewis4u null 값을 전달하면 parse(null)현재 날짜 시간으로 변환됩니다
Hamelraj

1
맞습니다 ... 그리고 어떤 경우에는 좋지 않습니다! 그러니 조심하세요!
lewis4u

73

모델 세트에서 :

protected $dates = ['name_field'];

당신의 관점에서 :

{{ $user->from_date->format('d/m/Y') }}

공장


3
나는 이것이 이것을하는 가장 "라벨적인 방법"이라고 생각한다. 그래서 이것이 정답으로 표시되어야한다.
CodeChuck 2019

저도 동의합니다. 이것이 가장 좋은 방법입니다
JonaPkr

나를 위해 작동하지 않습니다. 난 아직 날짜 열 유형 및 타임 스탬프 열 유형,하지만 오류에 alreay 것Call to a member function format() on null
Bariq Dharmawan

36

확인할 수 있습니다 Date Mutators: https://laravel.com/docs/5.3/eloquent-mutators#date-mutators

당신은 당신의 설정 필요가 User모델 컬럼 from_date$dates배열 한 다음이에서 형식을 변경할 수 있습니다$dateFormat

또 다른 옵션은이 방법을 User모델에 넣는 것 입니다.

public function getFromDateAttribute($value) {
    return \Carbon\Carbon::parse($value)->format('d-m-Y');
}

실행 {{ $user->from_date }}하면 원하는 형식이 표시됩니다.


이 laravel을위한 더 나은 방법이라고 동의
limco

1
유일한 단점은 뷰에 문자열을 반환한다는 것입니다. 따라서 동일한보기에 다른 날짜 형식을 표시하려면 Carbon을 사용하여 날짜를 다시 분석해야합니다.
JustCarty

죄송합니다. 이것은 setFromDateAttribute 대신 getFromDateAttribute를 사용하기 때문에 Mutator입니다. 내가 아는 것에서 mutator는 set을 사용하고 접근
자는

열이 null의 경우이 반환 현재 날짜
Bariq Dharmawan

14

블레이드 템플릿에서 사용하기 쉬운 날짜는 그런 식으로 카본 을 사용 합니다.

{{ \Carbon\Carbon::parse($user->from_date)->format('d/m/Y')}}

10

다음과 같은 3 가지 방법이 있습니다.

1) 라 라벨 모델 사용

$user = \App\User::find(1);

$newDateFormat = $user->created_at->format('d/m/Y');

dd($newDateFormat);

2) PHP strtotime 사용

$user = \App\User::find(1);

$newDateFormat2 = date('d/m/Y', strtotime($user->created_at));

dd($newDateFormat2);

3) 카본 사용

$user = \App\User::find(1);

$newDateFormat3 = \Carbon\Carbon::parse($user->created_at)->format('d/m/Y');

dd($newDateFormat3);

9

방법 1 :

strtotime()종료 시간을 사용하는 것이 날짜를 주어진 형식으로 변경하는 가장 좋은 형식입니다.

strtotime() -영어 텍스트 날짜 / 시간 설명을 Unix 타임 스탬프로 구문 분석

이 함수는 영어 날짜 형식을 포함하는 문자열이 주어질 것으로 예상하고 현재 제공된 타임 스탬프를 기준으로 해당 형식을 Unix 타임 스탬프 (1970 년 1 월 1 일 00:00:00 UTC 이후의 초 수)로 구문 분석하려고 시도합니다. now가 제공되지 않은 경우 현재 시간입니다.

예:

<?php
$timestamp = strtotime( "February 26, 2007" );  
print date('Y-m-d', $timestamp );
?>

산출:

2007-02-26

방법 2 :

date_format() -새 DateTime 개체를 반환 한 다음 날짜 형식을 지정합니다.

<?php
$date=date_create("2013-03-15");
echo date_format($date,"Y/m/d H:i:s");
?>

산출:

 2013/03/15 00:00:00 

5

당신이 사용할 수있는 Carbon::createFromTimestamp

{{ \Carbon\Carbon::createFromTimestamp(strtotime($user->from_date))->format('d-m-Y')}}

4

비슷한 문제가있었습니다. 형식을 변경하고 싶었지만 블레이드 템플릿 엔진에서도 형식을 변경할 수있는 유연성을 원했습니다.

따라서 내 모델을 다음과 같이 설정합니다.

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

\Carbon\Carbon::setToStringFormat('d-m-Y');

class User extends Model
{
    protected $dates = [
        'from_date',
    ];
}

setToStringFormat이 모델이 형식을 사용하는 모든 날짜를 설정합니다.
이것의 장점은 뮤 테이터없이 내가 원하는 형식을 가질 수 있다는 것입니다. 뮤 테이터를 사용하면 속성이 문자열로 반환되므로 원하는 경우 블레이드 템플릿에서 다음과 같이 작성해야합니다. 템플릿의 형식을 변경합니다.

{{ date('Y', strtotime($user->from_date)) }}

별로 깨끗하지 않습니다.

대신 속성은 여전히 ​​Carbon 인스턴스로 반환되지만 먼저 원하는 형식으로 반환됩니다.
즉, 템플릿에서 다음과 같은 깔끔한 코드를 작성할 수 있습니다.

{{ $user->from_date->format('Y') }}

Carbon 인스턴스를 다시 포맷 할 수있을뿐만 아니라 템플릿의 속성에 대해 다양한 Carbon 메서드를 호출 할 수도 있습니다.

이 접근 방식에 대한 감독이있을 수 있습니다. 다른 스크립트에 영향을 미칠 경우 모델 상단에 문자열 형식을 지정하는 것은 좋지 않습니다. 내가 지금까지 본 것에서 그것은 일어나지 않았습니다. 해당 모델의 기본 카본 만 변경되었습니다.

이 경우 Carbon 형식을 원래 모델 스크립트의 맨 아래에 있던 형식으로 되 돌리는 것이 좋습니다. 이것은 엉뚱한 아이디어이지만 각 모델이 자체 형식을 갖도록 작동합니다.
반대로 각 모델에 대해 동일한 형식을 사용하는 경우 AppServiceProvider에서 대신 사용하십시오. 그것은 코드를 깔끔하고 유지하기 쉽게 유지합니다.


0

때때로 날짜 형식을 변경하면 특히 Laravel에서 제대로 작동하지 않습니다. 따라서이 경우 다음을 사용하는 것이 좋습니다.

$date1 = strtr($_REQUEST['date'], '/', '-');
echo date('Y-m-d', strtotime($date1));

그러면 "1970-01-01"과 같은 오류를 피할 수 있습니다!


그것은 php와 관련된 laravel 문제가 아닙니다. 읽어보세요 : m/d/y또는 d-m-y형식의 날짜 는 다양한 구성 요소 사이의 구분 기호를 보면 명확 해집니다. 구분 기호가 슬래시 (/)이면 미국식 m/d/y으로 간주됩니다. 구분자가 대시 (-)또는 점인 (.)경우 유럽 d-m-y형식으로 간주됩니다. 그러나 연도가 두 자리 형식으로 제공되고 구분 기호가 대시 (-)인 경우 날짜 문자열은로 구문 분석됩니다 y-m-d. php.net/manual/en/function.strtotime.php
Mayank Pandeyz

0

Laravel에서는 app / Helper / helper.php에 다음과 같은 함수를 추가 할 수 있습니다.

function formatDate($date = '', $format = 'Y-m-d'){
    if($date == '' || $date == null)
        return;

    return date($format,strtotime($date));
}

다음과 같은 컨트롤러에서이 함수를 호출합니다.

$start_date = formatDate($start_date,'Y-m-d');

도움이 되었기를 바랍니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.