Formatting date properly to insert in database using Carbon - php

I have a column in my database with date schema.
It accepts string in the form of 2018-02-21
I have a date value in this form 1/27/18, 4:15 AM
I need to format the date properly to insert it into the database.
I was trying to use Carbon Package to format the date, but no luck with it.
$date = "1/27/18, 4:15 AM";
$date->format(Y-m-d);
Obviously, this didn't work.
Could someone please help me solve this problem.

You need to convert your date to timestamp.
$date = "1/27/18, 4:15 AM";
$formated_date = Carbon::createFromTimestamp(strtotime($date))->format('Y-m-d');
It should works.
If you don't want to use carbon, you can try this with default php date function
date("Y-m-d H:i:s", strtotime($date));
Both case output will be
2018-01-27

Related

PHP: Changing incorrect date format into correct format

I have MySQL database with field date format dd/mm/YYYY. As you know this date format is not working perfect with PHP.
How can I transform such (dd/mm/YYYY) into good-looking (YYYY-mm-dd). If there is a PHP function?
You can use the DateTime::createFromFormat method
$dateTime = DateTime::createFromFormat('d/m/Y', '25/02/2016');
echo $dateTime->format('Y-m-d');
You can format dates using PHP's date() function.
$date = "2016-03-21";
$newDate = date("Y-m-d", strtotime($date));
you can fetch date directly from query by using mysql function DATE_FORMAT(date_column,"%d-%m-%Y")
select DATE_FORMAT(date_column,"%d-%m-%Y") as date from table
this will return date in 01-02-2016 format

How to convert VARCHAR into a date format?

There is a table column with the date format varchar and 0000-00-00 00:00:00.
Now I would like to display the date as a string. At the moment there is the date and even the time. I have no clue how to solve this.
I already tried converting by using strtotime():
$doa = $data['date']
...
$time = strtotime( $doa );
$date_format = date( 'd.m.y', $time );
what displays a wrong date 01.01.70.
Thanks in advance.
UPDATE:
...and here is how it will be stored in the db:
$timezone = 'Europe/Berlin';
date_default_timezone_set($timezone);
$timestamp = time();
$db_date = date("d.m.Y - H:i:ss", $timestamp);
When you're saving your date to the database, you're saving it as "varchar", so it's a string. Most probably your format is created like this before inserting the code into the database:
$date_format = date('Y-m-d H-i-s', $time);
This will convert a date to your "0000-00-00 00:00:00" format. I don't know about "months" and "days" at your format, so you might switch "m-d" pair in the above date() arguments.
Then you're pulling the data from the database, and in fact your have the correct code. You pull data in "0000-00-00 00:00:00" format, then convert it to Unix time (strtotime) and then format it using date() function. You just need to keep in mind that Unix time started at the 1th of January, 1970. This is why you're getting "01.01.70" from your code when applying zeros as a date string.
A short conclusion to all this: if you have any actual date (not all zeros) stored in your database, then all should be really fine.
Honestly speaking, PHP Date documentation has all clear details on date formatting, you can easily grab the idea.
Of course i can be mistaken and you have some more details, i just can't yet post to comments, a newbie here.

How to format `23/05/2012` into insertable value in DATETIME column?

I have dates formatted as d/m/y. How can I insert them into a DATETIME column?
Use MySQL's STR_TO_DATE() function:
INSERT INTO my_table VALUES (STR_TO_DATE('26/5/12', '%e/%c/%y'))
You need to use php's date() function along with strtotime() to convert date to any format you want.
MySQL database stores the date in YY-MM-DD format for datetime datatype, so if for example you have a date
$date = '26/05/2012';
You can convert it by using date() and strtotime()
$formatDate = date('Y-m-d', strtotime('26/05/2012'));
This will convert the date from 26/05/2012 to 2012-05-26 which then can be inserted into the database.
If you are using a timestamp datatype to store the date in your database, then all you need is to convert the current date into unix timestamp and store in database for example.
$date = strtotime('26/05/2012');
//this will convert the date to unix timestamp
Update:
as pointed out by #wallyk (thank you), strtotime() does not handles dd/mm/yy format. the fix is to replace the slash / by -m below code should work for you.
date('Y-m-d', strtotime(str_replace('/', '-', '26/05/2012')));
Try this:
$mysqldate = date("m/d/y g:i A", $datetime);
$date = date('d/m/Y');
$date = strtotime($date); //in unix time stamp format
Basically american date format is MM/DD/YYYY and you are providing DD/MM/YYYY so thats why startotime() returns you a null values on this input; and i prefer you must follow standard date format of american (MM/DD/YYYY) because if you are using mentioned format of date that will create more problems as well in different places ..
if you check by this
echo date('Y-m-d', strtotime('05/26/2012') );
and it is working fine ..
you could change your DATE column into a String Column and insert the data when ever you want 2 check if the date is right you can use a regular expression to do so

Display Date dd/mm/yy in php with time from date/time

I store the date and time in mysql as a date/time field which has this format: 2012-03-12 14:51:26, what i am trying to do is simply rearrange the DD/MM/YY to look like this.
When i use the following code, it just gives me a date wrong format warning.
echo date_format($date, 'Y-m-d H:i:s');
If you are just displaying the date you can supply a certain format in the SQL query
SELECT DATE_FORMAT("%d/%m/%Y", date_column) FROM table
If you convert the MySQL timestamp to a unix timestamp, then you can use the date() function to output it in whatever format you like:
$unixTimestamp = strtotime($mysqlDate);
echo date($dateFormat, $unixTimestamp);
See the date format strings here: http://php.net/manual/en/function.date.php
First, convert it to a Unix timestamp (which I find to be all around better than a date_time field for a lot of reasons), then use PHP's date function.
echo date('Y-m-d h:i:s', strtotime($date));
Simply do:
date("d/m/Y", strtotime($date));
And read about strtotime function.
this will work.
$date = date_create("2012-03-24 17:45:12");
echo date_format($date, 'Y-m-d H:i:s');

Convert US date format to ANSI SQL date format (YYYY-mm-dd)

I want to convert user-submitted date format (mm/dd/yyyy) to a MySQL date format (YYYY-mm-dd). Submission is via a simple PHP form direc tto MySQL database.
$mysql_date = date('Y-m-d H:i:s', strtotime($user_date));
An alternative method as of PHP 5.2
$datetime = new DateTime($user_date);
echo $datetime->format('Y-m-d H:i:s');
DateTime is Y38k and timezone friendly.
A further method, this time on the SQL side is to use the convert method in your sql query:
CONVERT(VARCHAR(11),$user_date,111)
//e.g.
SELECT CONVERT(VARCHAR(11),DATEFIELD,111) AS DATE
//or
SET DATEFIELD = CONVERT(VARCHAR(11),'".$user_date."',111)
See: http://www.w3schools.com/sql/func_convert.asp - the number at the end changes the type of date format, with 111 returning: 2006/12/30.

Categories