簡體   English   中英

如何將帶有日期和時間AM / PM的字符串轉換為24小時的mysql時間戳格式

[英]How to convert string with date and time AM/PM to 24 Hour mysql timestamp format

我試圖從具有以下dd / mm / yyyy hh:mm:ss AM / PM格式的字符串中將日期和時間插入到mysql datetime字段中:

20/10/2014 05:39 PM

20/10/2014 05:39 AM

我知道MYSQL時間戳格式是yyyy-mm-dd hh:mm:ss or 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

怎么做?

MySQL已經知道如何使用STR_TO_DATE()函數結合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'));

...將正確插入DATETIME2014-10-20 17:39:00到您的表中。

如果您真的更喜歡首先在PHP中使用它,請使用格式字符串'd/m/YH: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

如果您處於使用早於5.3的PHP版本的非常不幸的情況下,您可以使用strptime()獲得類似的結果,但是您需要將其數組輸出組裝成MySQL的字符串格式。

這應該適合你:

<?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

我想你可以使用以下代碼。 它更容易理解:

echo date("Y-m-d H:i", strtotime("20/10/2014 05:39 PM"));

如果你使用PHP,這是更好的方法

echo date('Y-m-d H:i', strtotime('20/10/2014 05:39 PM'));

回音日期(“Ymd H:i:s”,strtotime(“20-10-2014 05:39 PM”));

使用上面的代碼 - 但請記住,在輸入日期中您使用“ - ”代替“/”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM