Вставка пользовательской даты в базу данных SQL [дубликат]

Используя jQuery, вы можете вызвать click() , чтобы имитировать щелчок.

242
задан Mifeet 3 May 2016 в 13:00
поделиться

10 ответов

Проблема в том, что вы используете 'M' и 'D', которые являются текстовыми представлениями, MySQL ожидает числовое представление формата 2010-02-06 19:30:13

Try: date("Y-m-d H:i:s"), который использует числовые эквиваленты.

edit: переключился G на H, хотя он может и не повлиять, вы, вероятно, захотите использовать 24-часовой формат с ведущими 0.

536
ответ дан Mark Elliot 16 August 2018 в 00:26
поделиться
  • 1
    это должно быть одним из самых распространенных форматов datetime, которые когда-либо понадобились бы. должен быть встроенным php-глобальным или частью самой функции даты (например, «c», «r») – billynoah 9 June 2016 в 17:49
  • 2
    Почему это не так, я не знаю. Я должен ссылаться на переполнение стека каждый. Один. функционирование. время. – Ash 2 August 2016 в 17:17
  • 3
    Быстрее приходить сюда, чем искать в моем коде для такого использования. – MRodrigues 20 October 2016 в 13:53
  • 4
    Просто подумал о симпатичной мнемонике для запоминания формата: « Y наш m y d не был His ;. работает на стольких уровнях :) – IzzEps 12 January 2017 в 20:59
  • 5
    Это правильный ответ, и когда я не использую фреймворк и не должен писать SQL, этот ответ полезен. Но для меня, я обычно не кодирую на этом уровне, если я не пишу какой-то маленький скрипт, чтобы делать определенную вещь, на которую меня не волнует. – Halfstop 30 March 2017 в 15:05

Нет необходимости использовать метод date () из PHP, если вы не используете временную метку. Если dateposted - столбец datetime, вы можете вставить текущую дату следующим образом:

$db->query("INSERT INTO table (dateposted) VALUES (now())");
6
ответ дан Adam 16 August 2018 в 00:26
поделиться
  • 1
    Спасибо, что поделитесь этим подходом. Это самый простой метод, который я видел до сих пор. – Shondeslitch 11 March 2017 в 21:48

Отметьте временную метку для столбца MySQL DATETIME:

strftime('%Y-%m-%d %H:%M:%S',$timestamp);
8
ответ дан Ahmed Saber 16 August 2018 в 00:26
поделиться
$date_old = '23-5-2016 23:15:23'; 
//Date for database
$date_for_database = date ("Y-m-d H:i:s", strtotime($date_old));

//Format should be like 'Y-m-d H:i:s'`enter code here`
10
ответ дан Ali Umair 16 August 2018 в 00:26
поделиться
  • 1
    Хотя этот код может ответить на вопрос, предоставляя дополнительный контекст в отношении why и / или , как он отвечает на вопрос, значительно улучшит его долгосрочную ценность. Пожалуйста, отредактируйте свой ответ, чтобы добавить какое-то объяснение, и исправить проблемы с форматированием. – Toby Speight 3 May 2016 в 12:00

Это сводило меня с ума, ища простой ответ. Наконец, я сделал эту функцию, которая, кажется, улавливает все данные и дает хорошую строку SQL, которая является правильной или, по крайней мере, действительной и проверяемой. Если это 1999-12-31, это, вероятно, неверно, но не приведет к ошибке в MySQL.

function MakeSQLDate($date) {
    if (is_null($date)) {
        //use 1999-12-31 as a valid date or as an alert
        return date('Y-m-d', strtotime('1999-12-31'));
    }

    if (($t = strtotime($date)) === false) {
        //use 1999-12-31 as a valid date or as an alert
        return date('Y-m-d', strtotime('1999-12-31'));
    } else {
        return date('Y-m-d H:i:s', strtotime($date));
    }
}
0
ответ дан Brian Jones 16 August 2018 в 00:26
поделиться

Вот альтернативное решение: если у вас есть дата в PHP как временная метка, обход, обрабатывающий ее с помощью PHP, и пусть DB позаботится о ее преобразовании с помощью функции FROM_UNIXTIME.

mysql> insert into a_table values(FROM_UNIXTIME(1231634282));
Query OK, 1 row affected (0.00 sec)

mysql> select * from a_table;

+---------------------+
| a_date              |
+---------------------+
| 2009-01-10 18:38:02 |
+---------------------+
36
ответ дан JAL 16 August 2018 в 00:26
поделиться
  • 1
    Это элегантное решение. Спасибо :) – kta 15 March 2014 в 15:22
  • 2
  • 3
    @trejder, Кто сказал вам, что делать это в mysql быстрее, чем делать это в php? Сделать это на PHP лучше, потому что БД обычно является узким местом, и вы хотите войти и выйти как можно скорее . – Pacerier 15 January 2015 в 08:57
  • 4
    @Pacerier DB является узким местом, если у вас плохо построенная БД или слишком много небольших запросов вместо более эффективного эффективного одиночного запроса или во многих случаях, если вы полагаетесь на ORM для управления базой данных. Твердый SQL с хорошо проиндексированной реляционной базой данных не медленный. – mopsyd 1 May 2015 в 19:37
  • 5
    @mopsyd, DB является узким местом, потому что масштабирование по горизонтали требует сложности. Сравните это с веб-серверами, которые можно дублировать по всему миру без каких-либо изменений кода. – Pacerier 24 May 2015 в 15:38

Я использую эту функцию (PHP 7)

function getDateForDatabase(string $date): string {
    $timestamp = strtotime($date);
    $date_formated = date('Y-m-d H:i:s', $timestamp);
    return $date_formated;
}

Старые версии PHP (PHP & lt; 7)

function getDateForDatabase($date) {
    $timestamp = strtotime($date);
    $date_formated = date('Y-m-d H:i:s', $timestamp);
    return $date_formated;
}
7
ответ дан SandroMarques 16 August 2018 в 00:26
поделиться
  • 1
    Я проголосовал за ваш ответ, потому что он работал после того, как я отредактировал первую строку; function getDateForDatabase(string $date) : string { to function getDateForDatabase($date) { Почему объявления типа выдают ошибку, я не знаю достаточно PHP, чтобы сказать. – Chris Pink 28 July 2017 в 09:10
  • 2
    «Аргумент 1, переданный в getDateForDatabase (), должен быть экземпляром строки, заданной строкой, & quot; - мой вход был строкой, – Chris Pink 28 July 2017 в 09:12
  • 3
    Благодаря ! Я действительно задавался вопросом, не так ли. – Chris Pink 28 July 2017 в 10:51

Я использую следующий код PHP для создания переменной, которую я вставляю в столбец DATETIME MySQL.

$datetime = date_create()->format('Y-m-d H:i:s');

Это будет содержать текущую дату и время сервера.

20
ответ дан Steffan Clent Davies 16 August 2018 в 00:26
поделиться

Формат MySQL datetime с PHP

$date = "'".date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $_POST['date'])))."'";
7
ответ дан Taryn 16 August 2018 в 00:26
поделиться

Из комментариев справочной страницы php date() :

<?php $mysqltime = date ("Y-m-d H:i:s", $phptime); ?>

У вас был «Y» правильный - это полный год, но «M» - это три символа месяца, а «м» - двухзначный месяц. Такая же проблема с «D» вместо «d». «G» - это 1 или 2-значный час, где «H» всегда имеет преимущество 0 при необходимости.

95
ответ дан Tim Lytle 16 August 2018 в 00:26
поделиться
  • 1
    +1 для наиболее экспансивного объяснения и ссылки на руководство :) – Pekka 웃 7 February 2010 в 01:33
  • 2
    Спасибо @Pekka - Я помню, когда у нас с вами был примерно такой же представитель - вы были довольно активны. – Tim Lytle 7 February 2010 в 01:42
  • 3
    да, я сейчас много работаю, и это мое любимое времяпрепровождение между ними :), которое снова изменится. – Pekka 웃 7 February 2010 в 01:50
Другие вопросы по тегам:

Похожие вопросы: