'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>
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
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow

