2016-12-13 21 views
-1

我使用的是PHP的DateTime函數。我從格式爲d-m-Y的日曆中獲取日期,並通過ajax將其傳遞給我的函數。直到這一步,我纔會收到日期。 當我嘗試的日期存儲在UNIX格式使用:DateTime函數unix時間戳轉換錯誤

$ai_ff_date=DateTime::CreateFromFormat('d-m-Y', $data['date']); 

$final_date=$ai_ff_date->format('U'); 

存儲的日期是錯誤的。假設我通過ajax傳遞的日期是26-12-2016,那麼存儲在數據庫27-12-2016中。爲什麼它更多地計算一天然後輸入。

+0

由於其添加小時和分鐘額外的一天....只是使用驗證設置您的願望時 – kashif

+0

如何制止呢? –

+1

Unix時間戳是UTC,但輸入的日期不是。相同日期將導致不同的Unix時間戳,具體取決於PHP配置文件中配置的時區,因爲它們不應該是世界各地的相同日期。注意'DateTime :: createFromFormat'還接受第三個可選參數來指定一個自定義時區,您可以在其中指定所插入日期的正確區域。 – Havenard

回答

0

使用此代碼:

$date = date('Y-m-d H:i:s', strtotime('-1 day', $stop_date)); 
$ai_ff_date=DateTime::CreateFromFormat('d-m-Y',$date); 
$final_date=$ai_ff_date->format('U'); 

,並請檢查變量(未測試的代碼)

+0

謝謝你的回答。但這不起作用 –

+0

什麼是錯誤? – kashif

+0

注意:遇到的格式不正確的數字值 –

0

你可能想的日期格式轉換爲"Y-m-d"第一,然後調用,在DateTime()構造。然而,因爲你想要做的只是獲得TimeStamp,你可能也會直接做到這一點,而不使用DateTime。下面的代碼片段顯示了在這裏的意思是:

<?php 

    $data = ['date'=>"13-12-2016"]; //<== JUST AN EXAMPLE FOR TESTING!!! 
    // SIMPLY CONVERT THE DATE TO Y-m-d FIRST. 
    $dateYMD = date("Y-m-d", strtotime($data['date'])); 

    // THEN USE DateTime CONSTRUCTOR TO CREATE A NEW DateTime INSTANCE 
    // AND THEN RUN THE FORMAT YOU WISH:: 
    $final_date = (new DateTime($dateYMD))->format('U'); 


    var_dump($final_date);     //<== YIELDS: string '1481583600' (length=10) 
    var_dump(date("Y-m-d", $final_date)); //<== YIELDS: string '2016-12-13' (length=10)