'How to set a value for the input type 'datetime-local'?

I tried this:

<input type="datetime-local"  value="<?php echo $row['Time']; ?>" class="date" name="start" REQUIRED>

How can I set the value of this input field with the data from the database?
It doesn't work!!
I need to make it possible to edit too.
Or should I use another type of input?
$row['Time'] is from the database!



Solution 1:[1]

When submitting <form> using <input type="datetime-local">

the value format you will get is look like this.

2019-09-06T00:21

To set new value in your input type box.

You must use:

date('Y-m-d\TH:i', strtotime($exampleDate)) //2019-08-18T00:00

Solution Example:

$exampleDate = "2019-08-18 00:00:00"; //sql timestamp
$exampleDate = strtotime($exampleDate); //convert to unix timestamp 
$newDate = date('Y-m-d\TH:i', $exampleDate); //format unix to date

or

$exampleDate = "2019-08-18 00:00:00";//sql timestamp
$newDate = date('Y-m-d\TH:i', strtotime($exampleDate));

If you don't use strtotime() you will get an error of

Notice: A non well formed numeric value encountered


**Tested**:
 - $exampleDate = 2019-08-18 00:00:00 ;
 - //Not Working - output(1970-01-01T01:33:39)
 - <?php echo date('Y-m-d\TH:i:s', $exampleDate);?>
 - //Not Working - output(1970-01-01T01:33:39+01:00)
 - <?php echo date('Y-m-d\TH:i:sP', $exampleDate);?>
 - //Not Working - output(2019-08-18T00:00:00+02:00)
 - <?php echo date("c", strtotime($exampleDate));?>
 - //Not Working - output(2019-09-23T19:36:01+02:00)
 - <?php echo (new DateTime($row['Time']))->format('c');?>
 - //Working Perfect - output(2019-08-18T00:00:00)
 - <?php echo date('Y-m-d\TH:i:s', strtotime($exampleDate));?> 

Solution 2:[2]

it's simple is that and working for me first convert your php value to this format

 <?php  $datetime = new DateTime($timeinout[0]->time_in);   ?>

then in value of html input element use this format

<input type="datetime-local" id="txt_time_in" placeholder="Time In" name="timein" value = "<?php echo $datetime->format('Y-m-d\TH:i:s'); ?>" class="form-control" /> 

this will set your value to input element

Solution 3:[3]

The answer of Karol Gasienica is a great explanation but somehow did not work for me even in their replies

date('Y-m-d\TH:i:s', $row['Time']); //Gives me 1970-01-01 00:00
date('Y-m-d\TH:i:sP', $row['Time']); //Gives me no display
date("c", strtotime($row['Time'])); //No display too

What worked for me is this

$t = $row['Time'];
date('Y-m-d\TH:i:s', strtotime($t)); // This got it perfectly

However I still voted it up becauce of the explanation.

Solution 4:[4]

You can use

date('Y-m-d\TH:i'); //Example result: '2017-01-01T01:01'

if use \T instead of T (not working)

date('Y-m-dTH:i'); //Example result: '2017-01-01UTC01:01'

Solution 5:[5]

None of the above solutions worked for me as of 2019 using Google Chrome Version 78.0.3904.70 (Official Build) (64-bit)

What worked for me is.

<input type="datetime-local" value="2017-06-13T13:00">

As you can see the format is 2017-06-13T13:00 or Y-m-dTH:i.

As of PHP you can do like.

<input type="datetime-local" value="<?php echo Date('Y-m-d\TH:i',time()) ?>">

Hope this will save someone's time. :)

Solution 6:[6]

Better use timezone feature

function getCurrentDateTime(){
    $date = new DateTime();
    $date->setTimezone(new DateTimeZone('GMT+6')); //Time Zone GMT +6
    $dt= $date->format('Y-m-d\TH:i:s');
    return $dt;
}

Solution 7:[7]

Try that. I get that in Bootstrap 4. (Google Translate: prueba con eso, a mi me sale con eso en Bootstrap 4. )

<input class="form-control" type="datetime-local" name="fecha_e" id="fecha_e" value=" 
<?php echo date('Y-m-d\TH:i', strtotime($data['fecha_e_tarea'])); ?>" required>

Solution 8:[8]

The simple way working for me is

<input  type="datetime-local"  value="<?= str_replace(' ', 'T', $date) ?>" name="date"  required />

Solution 9:[9]

Easiest way! Here's how to set a value using php for input field with type="datetime-local" setting value using php in type="datetime-local"

$date_now_time = date("Y-m-d H:i:s", strtotime('+5 hours'));
$from_for_val=  date("Y-m-d\TH:i:s", strtotime($date_now_time));

Below is html form input field with type="datetime-local" and its showing how to set value inside input field

   <input type="datetime-local" name="submit_from" value="<?=$from_for_val;?>" >
   

Solution 10:[10]

$tripid=$_REQUEST['tripid'];
$sql="SELECT * FROM tripdetails WHERE trip_id='".$tripid."'";
$trpresult=mysqli_query($connect,$sql);
  if(mysqli_num_rows($trpresult)==1)
    {
      $trpdetails=mysqli_fetch_assoc($trpresult);
    }
 $trpstartdate = substr_replace($trpdetails['trip_start_date'],T,11,0);

 $string = preg_replace('/\s+/', '', $trpstartdate);

This is Html part

<input type="datetime-local" name="trip_start_date" id="cal" value="<?php echo $string?>">

Solution 11:[11]

This will convert datetime from database to datetime-local

str_replace(" ","T",substr_replace($string ,"", -3))

Solution 12:[12]

Try it:

<input type="datetime-local"  value="<?php $row['Time'] = preg_replace("/\s/",'T',$row['Time']); echo $row['Time']?>" class="date" name="start" REQUIRED>

enter image description here

Solution 13:[13]

for everybody on 2021 the working format is Y-m-d\TH:i all other old format is just a hussel. if you are using carbon library

 \Carbon\Carbon::parse($data->chosen_date,$timezone)->format('Y-m-d\TH:i')

after that you can just pass to value like this if are using ajax or fetch api

document.getElementById('chosen_date').value = data.chosen_date