Вставить текущую дату в формате datetime mySQL


100

У меня проблемы с правильной вставкой даты в мою базу данных.

$date = date('m/d/Y h:i:s', time());

Я использую этот формат, и он правильно отображается, однако, когда я вставляю

mysql_query("INSERT INTO table 
(dateposted) 
VALUES ('$date')");

похоже, он не работает успешно, и время остается 00:00:00. Если бы вы могли найти решение, которое было бы отличным, спасибо.


2
Dateposted - это формат даты и времени.
CCates 02

Ответы:


223

Если вы хотите сохранить текущее время, просто используйте функции MYSQL.

mysql_query("INSERT INTO `table` (`dateposted`) VALUES (now())");

Если вам нужно использовать PHP для этого, отформатируйте его, Y-m-d H:i:sпопробуйте

$date = date('Y-m-d H:i:s');
mysql_query("INSERT INTO `table` (`dateposted`) VALUES ('$date')");

21
Но он будет использовать локаль / часовой пояс сервера MySQL. Если у U есть Apache / PHP и MySQL на разных серверах, и часовой пояс на одном из них установлен неверно, U будет иметь разные значения.
Jeff_Alieffson

3
@Jeff_Alieffson прав. Использование UTC_TIMESTAMP()( dev.mysql.com/doc/refman/5.5/en/… ) предпочтительнее вместоNOW()
Ejaz

Я пробовал то же самое, но получаю 0000-00-00 00:00:00, а мой тип данных - datetime. любая помощь в этом?
user9437856 06

Было бы здорово использовать PDO вместо mysql_query (), не так ли?
DaWe



6

NOW()используется для вставки текущей даты и времени в таблицу MySQL. Все поля с типами данных DATETIME, DATE, TIME & TIMESTAMPхорошо работают с этой функцией.

ГГГГ-ММ-ДД ЧЧ: мм: СС

Демонстрация:

Следующий код показывает использование NOW()

INSERT INTO auto_ins
(MySQL_Function, DateTime, Date, Time, Year, TimeStamp)
VALUES
(“NOW()”, NOW(), NOW(), NOW(), NOW(), NOW());

5

задайте typeстолбец с именем datepostedкак DATETIMEи выполните следующий запрос:

INSERT INTO table (`dateposted`) VALUES (CURRENT_TIMESTAMP)

2

" datetime " ожидает, что дата будет сформирована следующим образом: ГГГГ-ММ-ДД ЧЧ: ММ: СС

поэтому отформатируйте дату таким образом, когда вы вставляете.


Поэтому я бы сделал дату ("ГГГГ / ММ / ДД ЧЧ: ММ: СС", time ()) ;?
CCates 02

1
Нет? используйте тире (-), а не косую черту (/).
Ян Ганчич 02

1
     <?php $date= date("Y-m-d");
$time=date("H:m");
$datetime=$date."T".$time;
mysql_query(INSERT INTO table (`dateposted`) VALUES ($datetime));
?>

<form action="form.php" method="get">
<input type="datetime-local" name="date" value="<?php echo $datetime; ?>">
<input type="submit" name="submit" value="submit">


1
Добро пожаловать в Stack Overflow! Хорошие ответы объясняют, а также предоставляют код. Попробуйте обновить свой ответ, включив в него объяснение того, как работает этот код и почему это лучший вариант.
Ajean

1

Если вы передаете дату из PHP, вы можете использовать любой формат с помощью STR_TO_DATE()функции mysql. Пусть вы вставляете дату через html-форму

$Tdate = "'".$_POST["Tdate"]."'" ;    //   10/04/2016
$Tdate = "STR_TO_DATE(".$Tdate.", '%d/%m/%Y')"  ;  
mysql_query("INSERT INTO `table` (`dateposted`) VALUES ('$Tdate')");

datepostedДолжен быть MySQL dateтипа. или mysql добавит 00:00:00
в некоторых случаях. Вам лучше вставить дату и время вместе в БД, чтобы вы могли выполнять вычисления с часами и секундами. ().

$Tdate=date('Y/m/d H:i:s') ; // this to get current date as text .
$Tdate = "STR_TO_DATE(".$Tdate.", '%d/%m/%Y %H:%i:%s')"  ;  

1

Лучший способ сделать это проще и эффективнее:

CREATE TABLE table_name (
field1,
..
..
time_updated timestamp default current_timestamp
)

Теперь, когда вы вставляете строку в таблицу, вы можете пропустить это поле ( time_updated), так как оно заполнится текущим временем как значением по умолчанию.


0

Просто используйте с вашим часовым поясом:

date_default_timezone_set('Asia/Kolkata');      
$date=date("Y/m/d h:i:sa");

0

$ date = date ('Ymd H: i: s'); с типом: 'datetime' мне очень понравилось, так как я хотел напечатать всю дату и время ..

$ date = date ('Ymd H: i: s'); $ stmtc-> bindParam (2, $ date);


0

Это зависит от того, какой тип данных вы установили для своей таблицы db.

DATETIME (тип данных)

MYSQL
INSERT INTO t1 (dateposted) VALUES ( NOW() )
// This will insert date and time into the col. Do not use quote around the val
PHP
$dt = date('Y-m-d h:i:s');
INSERT INTO t1 (dateposted) VALUES ( '$dt' )
// This will insert date into the col using php var. Wrap with quote.

ДАТА (тип данных)

MYSQL
INSERT INTO t1 (dateposted) VALUES ( NOW() )
// Yes, you use the same NOW() without the quotes.
// Because your datatype is set to DATE it will insert only the date
PHP
$dt = date('Y-m-d');
INSERT INTO t1 (dateposted) VALUES ( '$dt' )
// This will insert date into the col using php var.

ВРЕМЯ (тип данных)

MYSQL
INSERT INTO t1 (dateposted) VALUES ( NOW() )
// Yes, you use the same NOW() as well. 
// Because your datatype is set to TIME it will insert only the time
PHP
$dt = date('h:i:s');
INSERT INTO t1 (dateposted) VALUES ( '$dt' )
// This will insert time.

-1

Я считаю, что вам нужно немного изменить свой код, как показано ниже, вместе с типом поля базы данных.

mysql_query("INSERT INTO table (`dateposted`) VALUES ($datetime)");

Надеюсь, сработает отлично.


-3

использовать это

$date = date('m/d/Y h:i:s', time());

а затем в MYSQL выполните

type=varchar

тогда дата и время будут успешно вставлены


ваша первая функция такая же, как и в вопросе. И остальная часть этого ответа не требует повторного открытия вопроса 5-летней давности. Пожалуйста, объясните, почему вы думаете, что ваше решение лучше, чем те, которые были опубликованы 5 лет назад.
Мэтью Чарамитаро

потому что в старом вопросе не объясняется тип данных
vikas pandey

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.