2017-03-17 89 views
0

我面臨一個unix時間戳,PHP和MySQL的問題,如果有人可以向我解釋我出錯或如果我不是那麼爲什麼我得到我得到的數字。PHP的UNIX時間戳不迭代到相同的值

當我使用jquery datepicker將year-month-date格式中的日期傳遞給php時,時間戳中23:00:00的默認時間和分鐘被設置,儘管我沒有在這個時間戳中傳遞這個信息請求。所以我的問題是這個幻像23:00:00出現在哪裏?

工作流程:

使用日期選擇器:日期選擇器 - > PHP - >的MySQL = TIMESTAMP已時間設定在23點00分00秒。

沒有使用datepicker: php-> mysql = TIMESTAMP具有正確的小時和分鐘。

感謝您的閱讀。

編輯:根據要求PHP代碼:

PHP code: 

$setdatealpha = $_POST['datepickeralpha']; 
$setdatealpha = strtotime($setdatealpha); 

// With this, I am inserting into MySQL like so: 


$sql = "INSERT INTO TABLE (DATE_FIELD) VALUES (?)"; 
$stmt = $mysqli->prepare($sql); 
$stmt->bind_param('s',$setdatealpha); 
$stmt->execute(); 

現在,當我讀到輸入的信息回來了,它通過日期轉換日期時間格式(「YM-d」,時間戳),日期錄入正確,時間輸入具有23:00:00的值。

這不會發生,如果我通過strtotime(日期)做標準轉換;

+0

你能在這裏粘貼PHP代碼處理它 – daheda

回答

2

根據目前可用的信息,我建議您確保每個時間戳都是UTC。我總是遇到時區問題。

對於PHP,如:$current_timestamp = strtotime($date." UTC");
jQuery的日期選擇器,我發現這個計算器線程:How to obtain utc time in jQuery datetimepicker

+1

尼斯尖。但是,請注意(如果不謹慎使用),這可能會導致網站用戶進入例如'3月30日',並且'3月29日'回來了,這至少會讓人困惑。您必須每次使用相同的時區。 –

1

最有可能的時區。

首先,讓我們來澄清一下上下文。 strtotime()產生一個Unix時間戳,你顯然用DATE_FIELD提供。如果可行,這意味着該列是INTEGER。在這種情況下,你之後正在做一些事情來顯示日期,並且你沒有共享那部分 - 另外,MySQL在這裏是無辜的,因爲它甚至不知道什麼是DATE_FIELD意味着日期。

雖然strtotime()可以餵食一個原始日期,但它也需要生成時間。除非知道時區,否則無法做到這一點。另外,如果你有一個帶有Unix時間戳的整型變量,並且你想把它顯示爲正確的日期,你還需要知道時區。

在這兩種情況下,如果你不提供它PHP將使用默認值:

var_dump(date_default_timezone_get()); 

所以你可能要設置一個已知的一個與例如date_default_timezone_set()。但是,您的用戶可能與您的時區不同,因此您的用戶對他們沒有任何意義。由於您提示用戶輸入原始日期(沒有時間),因此可能該時間實際上與問題無關。在這種情況下,你可能想:

  1. DATE類型的DATE_FIELD
  2. 避免strtotime()和類似的東西。您可能需要使用checkdate()