Search code examples
laravellaravel-5.3string-to-datetime

How to convert an input string into strtotime in laravel


I am using jQuery calendar to input dates in the form like

<div class="form-group">
     <label>Valid From:</label>
       <div class="input-group date">
       <div class="input-group-addon">
       <i class="fa fa-calendar"></i>
</div>
<input type="text" tabindex="4" data-date-start-date="0d" class="form-
 control pull-right datepicker" name="valid_from" id="datepicker2" value="
 {{old('valid_from')}}">
 </div>
 @if ($errors->has('valid_from'))
 <span class="has-error" style="color: red">
 <strong>{{ $errors->first('valid_from') }}</strong>
 </span>
 @endif
 </div>

and I am getting the value in the form of 09-03-2018 from form.

Model code and I tried converting it with mutator but it didn't work to model code

use SoftDeletes;
    protected $fillable = 
['name','valid_from','valid_to','city_id','p_limit','is_active','type'];
    protected $dates = [
//        'valid_from',
//        'valid_to',
        'deleted_at'
    ];
//    public function setDateOfBirthAttribute($dates)
//    {
//        $this->attributes['valid_from'] = Carbon::parse($dates);
//        $this->attributes['valid_to'] = Carbon::parse($dates);
//        $this->attributes['deleted_at'] = Carbon::parse($dates);
//    }
//    protected function getDateFormat()
//    {
//        return 'U';
//    }
//    protected function getDateFormat()
//    {
//        return 'd-m-Y ';
//    }
//    public function setFirstNameAttribute($dates)
//    {
//        $this->attributes['valid_from'] = strtotime($dates);
//        $this->attributes['valid_to'] = strtotime($dates);
//        $this->attributes['deleted_at'] = strtotime($dates);
//    }
//    public function getValidTillValueAttribute($date)
//    {
//        return Carbon::now()->toRfc2822String($date);
//    }
//    public function setValidTillValueAttribute($value)
//    {
////        $this->attributes['valid_to'] = 
 Carbon::createFromTimestamp($value);
//        $this->attributes['valid_to'] = strtotime($value);
//        dd($value);
//    }
//    public function setValidFromValueAttribute($value)
//    {
//        dd($value);
////        $this->attributes['valid_from'] = 
 Carbon::createFromTimestamp($value);
//        $this->attributes['valid_from'] = strtotime($value);
//    }

Controller code

public function store(PromotionRequest $request)
    {
        $input = $request->all();
//        return $request->all();
        $date = $request->valid_from;
        $date1 = $request->valid_to;
        $_newDate = strtotime($date);
        $_newDate1 = strtotime($date1);
//        dd($_newDate);
//        dd($_newDate1);
//        return $input;
//        return $_newDate1;
//        return $_newDate;

//        dd($request->all());
//        return $request->$_newDate;
//        return $request->$_newDate1;
        Promotion::create($input,$_newDate,$_newDate1);
//        Promotion::create($input);
//        return redirect('admin/promotion');
    } 

migration code

$table->increments('id');
$table->string('name')->unique();
$table->integer('valid_from');
$table->integer('valid_to');
$table->tinyInteger('is_active')->comment('0 = Not Active, 1 = Active');
$table->tinyInteger('type')->comment('1 = percentage, 2 = in currency');
$table->integer('city_id')->default(1)->comment = "foreign key to cities 
table";
$table->integer('p_limit')->unsigined();
$table->integer('updated_at')->unsigined();
$table->integer('created_at')->unsigined();
$table->integer('deleted_at')->unsigined()->nullable(true);
$table->foreign('city_id')->refrences('id')->on('cities');

I want to convert it into unix_timestamp any help would be really appreciated


Solution

  • You can convert string to date time timestamp using strtotime()

    Here is an example

    strtotime('09-03-2018');
    

    Another way is to use carbon

    Carbon::parse('string')->timestamp;
    

    Also make sure your model has these keys in $fillable array

    $fillable = ['your colums'];
    

    In your controller you do this

    $input['valid_from'] = strtotime($date);
    $input['valid_to'] = strtotime($date1);
    
    Promotion::create($input);
    

    Hope this helps