I m entering date in front end as 10:00 AM , 12:00 PM etc...( means 12 Hours format). now I want to save that value in database in time datatype column. How do I save that AM PM value into time datatype in MySQL and again want to display time appending AM PM on front end?
Asked
Active
Viewed 2.5k times
3 Answers
16
To insert:
# replace first argument of STR_TO_DATE with value from PHP/frontend
TIME( STR_TO_DATE( '10:00 PM', '%h:%i %p' ) );
To select:
# replace first argument with your time field
TIME_FORMAT( '22:00:00', '%h:%i %p' );
EDIT:
I'll just go ahead and presume you use mysql lib functions.
// first sanitize the $_POST input
// also, make sure you use quotes to identify the $_POST keys
$open = mysql_real_escape_string( $_POST[ 'MondayOpen' ] );
$close = mysql_real_escape_string( $_POST[ 'MondayClose' ] );
// this is the query, which should work just fine.
$sql = '
INSERT INTO
`table_lib_hours`
SET
`day_name` = "Monday",
`day_open_time` = TIME( STR_TO_DATE( "' . $open . '", "%h:%i %p" ) ),
`day_close_time` = TIME( STR_TO_DATE( "' . $close . '", "%h:%i %p" ) )
';
$result = mysql_query( $sql );
Then to retrieve the values:
$sql = '
SELECT
`day_open_time`,
`day_close_time`,
TIME_FORMAT( `day_open_time`, "%h:%i %p" ) as day_open_time_formatted,
TIME_FORMAT( `day_close_time`, "%h:%i %p" ) as day_close_time_formatted
FROM
`table_lib_hours`
WHERE
`day_name` = "Monday"
';
$resultset = mysql_query( $sql );
This will return a result set where the formatted data is in the *_formatted
fields
EDIT:
Adjusted %m
(month) to %i
(minutes). A thank you to Donny for the well spotted slip up.

Decent Dabbler
- 22,532
- 8
- 74
- 106
-
First of: you shouldn't use $_POST directly in your queries... really. You should sanitize the values first. But to better help you: can you also show the PHP code where you execute this query? (Please update your question, rather then post a comment, if you will. Because that's easier to read. Thanks). – Decent Dabbler Jan 30 '10 at 09:18
-
`TIME( STR_TO_DATE( "' . $open . '", "%h:%m %p" ) )` gives parse error – xkeshav Jan 30 '10 at 10:31
-
it should be `TIME( STR_TO_DATE( '" . $open . "', '%h:%m %p' ) )` – xkeshav Jan 30 '10 at 10:53
-
when i run above code it display error `day_close_time can not be null` – xkeshav Jan 30 '10 at 11:02
-
@I Like PHP: yes, if you use double quotes as the string delimiter for `$sql`. But as you can see in my example I use single quotes. – Decent Dabbler Jan 30 '10 at 11:03
-
@I Like PHP: Make sure you use appropriate quoting. So, If you are using double quotes around the `$sql` string, then you need single quotes as string delimiters around values you insert in MySQL and vice versa. – Decent Dabbler Jan 30 '10 at 11:06
-
The reason I use single quotes for PHP strings is that PHP parses variables in double quoted strings. I like to avoid this. I only even explicitly insert variables in PHP string by using the concatenation operator (the dot `.`). – Decent Dabbler Jan 30 '10 at 11:11
-
1Correction, should be: `TIME_FORMAT( '22:00:00', '%h:%i %p' );` See here: http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-format – Donny Kurnia Jan 31 '10 at 19:00
-
@Donny: oops, you're right. I'll adjust it. Thank you for the correction. – Decent Dabbler Jan 31 '10 at 19:38
0
This is the solution In your view----- $('#schedule_time' + ).datetimepicker({pickDate: false, format: 'h:m A', minTime: new Date(), useCurrent: false, autoClose: false});
when insert into datbase ----'schedule_time' => date('H:i:s', strtotime($this->input->post('schedule_time'))),
when show ---------

Abhijeet Pawar
- 1
- 3