如何将日期和时间 AM/PM 的字符串转换为 24 小时 mysql 时间戳格式
How to convert string with date and time AM/PM to 24 Hour mysql timestamp format
我正在尝试从具有以下内容的字符串中将日期和时间插入 mysql 日期时间字段 dd/mm/yyyy hh:mm:ss AM/PM 格式:
20/10/2014 05:39 PM
20/10/2014 05:39 AM
我知道 MYSQL 时间戳格式是 yyyy-mm-dd hh:mm:ss 或 0000-00-00:00:00:00
所以如果我这样做:
$s = substr("20/10/2014 05:39 PM", 0, 10);
$h = date("G:i", strtotime($s));
list($day, $month, $year, $hour, $minute) = split('[/ :]', "20/10/2014 05:39 PM");
echo $d1me = $year . '-' . $month. '-' . $day . ' ' . $h;
我得到2014-10-20 19:00
所以我猜 date_default_timezone_set() 函数有问题,如何解决这个问题并获得预期结果?
20/10/2014 05:39 PM -> 2014-10-20 17:39:00
20/10/2014 05:39 AM -> 2014-10-20 05:39:00
怎么做?
这应该适合你:
<?php
$input = "20/10/2014 05:39 AM"; //20/10/2014 05:39 PM
list($day, $month, $year, $hour, $minute, $dayType) = preg_split('/[\/\s:]+/', $input);
echo $d1me = $year . '-' . $month. '-' . $day . ' ' . ($dayType == "PM"?$hour+12: $hour) . ":" . $minute . ":00";
?>
输出:
2014-10-20 05:39:00 //2014-10-20 17:39:00
MySQL 已经知道如何使用 STR_TO_DATE()
function in combination with format strings used by DATE_FORMAT()
.
本地解析许多不同类型的日期字符串
所以,我根本不会让 PHP 参与这个过程,而是让 MySQL 自己解析输入。
您需要使用的格式字符串是%d/%m/%Y %h:%i %p
,其中%p
代表AM/PM
.
您可以在 INSERT
语句中使用整个表达式,直接从 PHP 传递字符串,假设您已经验证了它们的格式。
INSERT INTO your_table (timestamp_column) VALUES (STR_TO_DATE('20/10/2014 05:39 PM', '%d/%m/%Y %h:%i %p'));
...将正确地将 DATETIME
值 2014-10-20 17:39:00
插入到您的 table.
如果您真的喜欢先在 PHP 中执行此操作,请使用格式字符串 'd/m/Y H:i A'
使用 DateTime::createFromFormat()
(PHP 5.3+)
$d = DateTime::createFromFormat('d/m/Y H:i A', '20/10/2014 05:39 PM');
var_dump($d);
class DateTime#2 (3) {
public $date =>
string(26) "2014-10-20 17:39:00.000000"
public $timezone_type =>
int(3)
public $timezone =>
string(15) "America/Chicago"
要从中获取 MySQL 格式的日期,
echo $d->format('Y-m-d H:i:s');
// 2014-10-20 17:39:00
如果您 非常不幸 的情况是 PHP 版本早于 5.3,您可以使用 strptime()
获得类似的结果,但您我需要assemble它的数组输出成MySQL的字符串格式。
我想你可以使用下面的代码。更容易理解:
echo date("Y-m-d H:i", strtotime("20/10/2014 05:39 PM"));
echo date("Y-m-d H:i:s", strtotime("20-10-2014 05:39 PM"));
使用上面的代码 - 但请记住,在输入日期中用“-”代替“/”。
如果您使用 php
,这是更好的方法
echo date('Y-m-d H:i', strtotime('20/10/2014 05:39 PM'));
我正在尝试从具有以下内容的字符串中将日期和时间插入 mysql 日期时间字段 dd/mm/yyyy hh:mm:ss AM/PM 格式:
20/10/2014 05:39 PM
20/10/2014 05:39 AM
我知道 MYSQL 时间戳格式是 yyyy-mm-dd hh:mm:ss 或 0000-00-00:00:00:00
所以如果我这样做:
$s = substr("20/10/2014 05:39 PM", 0, 10);
$h = date("G:i", strtotime($s));
list($day, $month, $year, $hour, $minute) = split('[/ :]', "20/10/2014 05:39 PM");
echo $d1me = $year . '-' . $month. '-' . $day . ' ' . $h;
我得到2014-10-20 19:00
所以我猜 date_default_timezone_set() 函数有问题,如何解决这个问题并获得预期结果?
20/10/2014 05:39 PM -> 2014-10-20 17:39:00
20/10/2014 05:39 AM -> 2014-10-20 05:39:00
怎么做?
这应该适合你:
<?php
$input = "20/10/2014 05:39 AM"; //20/10/2014 05:39 PM
list($day, $month, $year, $hour, $minute, $dayType) = preg_split('/[\/\s:]+/', $input);
echo $d1me = $year . '-' . $month. '-' . $day . ' ' . ($dayType == "PM"?$hour+12: $hour) . ":" . $minute . ":00";
?>
输出:
2014-10-20 05:39:00 //2014-10-20 17:39:00
MySQL 已经知道如何使用 STR_TO_DATE()
function in combination with format strings used by DATE_FORMAT()
.
所以,我根本不会让 PHP 参与这个过程,而是让 MySQL 自己解析输入。
您需要使用的格式字符串是%d/%m/%Y %h:%i %p
,其中%p
代表AM/PM
.
您可以在 INSERT
语句中使用整个表达式,直接从 PHP 传递字符串,假设您已经验证了它们的格式。
INSERT INTO your_table (timestamp_column) VALUES (STR_TO_DATE('20/10/2014 05:39 PM', '%d/%m/%Y %h:%i %p'));
...将正确地将 DATETIME
值 2014-10-20 17:39:00
插入到您的 table.
如果您真的喜欢先在 PHP 中执行此操作,请使用格式字符串 'd/m/Y H:i A'
DateTime::createFromFormat()
(PHP 5.3+)
$d = DateTime::createFromFormat('d/m/Y H:i A', '20/10/2014 05:39 PM');
var_dump($d);
class DateTime#2 (3) {
public $date =>
string(26) "2014-10-20 17:39:00.000000"
public $timezone_type =>
int(3)
public $timezone =>
string(15) "America/Chicago"
要从中获取 MySQL 格式的日期,
echo $d->format('Y-m-d H:i:s');
// 2014-10-20 17:39:00
如果您 非常不幸 的情况是 PHP 版本早于 5.3,您可以使用 strptime()
获得类似的结果,但您我需要assemble它的数组输出成MySQL的字符串格式。
我想你可以使用下面的代码。更容易理解:
echo date("Y-m-d H:i", strtotime("20/10/2014 05:39 PM"));
echo date("Y-m-d H:i:s", strtotime("20-10-2014 05:39 PM"));
使用上面的代码 - 但请记住,在输入日期中用“-”代替“/”。
如果您使用 php
,这是更好的方法echo date('Y-m-d H:i', strtotime('20/10/2014 05:39 PM'));