2014-12-07 177 views
0

我JavaScript的時間戳數據發送到PHP添加到MySQL在那裏我有一個TIMESTAMP類型:的Javascript時間戳的PHP - MySQL的時間戳型

數據庫 - 開始時間型:

enter image description here

現在我試着使用Ajax發送,從JavaScript var startTime = Date.now();時間戳到PHP,我需要等轉換成TIMESTAMP類型,MySQL的...所以我嘗試:

$datum = $app->request->post('startTime'); 
      $startTime = $datum->format('Y-m-d H:i:s'); //FIRST ATTEMP 
      $startTime = date("Y-m-d H:i:s", $datum); //SECOND TRY 

上面我寫了兩個案例,我嘗試但都沒有工作...我怎麼可以將其轉換爲正確的格式,將其添加到數據庫...

接近你會問爲什麼,當你有這個在PHP中,爲什麼得到它與J​​S? Becouse我的應用程序將使用人Autralia(和所有OV r是世界)和服務器是在歐洲,所以如果我使用PHP服務器的時間,然後我會作出錯誤的日期

+0

依靠PHP時間戳應該沒有問題,因爲它可以很容易地轉換爲任何時區。依靠客戶時間不是一個好主意。 – 2014-12-07 00:28:26

+0

但我怎麼能去用戶時區和用戶正確時間是什麼?與php – LaraBeginer 2014-12-07 00:29:53

+0

你不能確定讀取時區,但你可以根據IP地址的位置來衡量它,以作出有根據的猜測。然而,用戶應該能夠將他們的時區改變爲他們想要的時區。您可以使用類似'DateTime'類的PHP庫將時間戳轉換爲多個時區。 – 2014-12-07 00:32:11

回答

1

嗯,首先,你應該確保在$datum的數據,事實上,一個數字:

$datum = $app->request->post('startTime'); 
if (! ctype_digit($datum)) { 
    die('Invalid startTime!'); 
} 

在JavaScript中,Date.now()方法返回一個時間戳毫秒。該處理日期之類的東西使用,所以你必須用1000除以它變成秒(毫意味着「千分之一」)的PHP函數:

$datum = ($datum/1000); 

如果你已經這樣做這在瀏覽器中,那麼你當然應該忽略這一點。

在將其插入數據庫之前,您必須將秒轉換爲MySQL可以理解的格式。 DATETIME/TIMESTAMP格式是YYYY-MM-DD HH:MM:SS。在PHP中,你可以像這樣格式化:

$datum = date('Y-m-d H:i:s', $datum); 
+0

謝謝你的工作。也有沒有JS獲取用戶當前時間基於他的時區,但只是與PHP的方式...我需要做的becouse JS時間可以從用戶更改...和我的應用程序是基於時間 – LaraBeginer 2014-12-07 00:54:51

+0

你可以問用戶獲取他們的位置,然後基於此計算他們的時間。據我所知,除了要求提供用戶的時區/時間之外,沒有一種無法防止的方法。您可以使用他們的IP地址和一些Web服務來查找他們的位置,但它有它自己的問題(例如,它們可能位於代理之後)。 – 2014-12-07 01:08:42

1

下面的代碼將轉換JS日期/時間到MySQL格式:

function SQLdate_now() { 
    /* MySQL format */ 
    var d = new Date(); 
    var month = d.getMonth()+1; 
    var day = d.getDate(); 
    var hour = d.getHours(); 
    var minute = d.getMinutes(); 
    var second = d.getSeconds(); 
    var output = d.getFullYear() + '-' + 
     ((''+month).length<2 ? '0' : '') + month + '-' + 
     ((''+day).length<2 ? '0' : '') + day + ' ' + 
     ((''+hour).length<2 ? '0' :'') + hour + ':' + 
     ((''+minute).length<2 ? '0' :'') + minute + ':' + 
     ((''+second).length<2 ? '0' :'') + second; 
    return(output); 
}; 
+0

爲什麼說,我有時間戳,所以客戶端從JS的時間戳我發送到PHP,我需要將時間戳轉換爲TIMESTAMP類型爲mysql – LaraBeginer 2014-12-07 00:37:18

+0

我認爲Sverri的答案更有意義。我有一個要求,在過去做了上述,所以我包括該代碼。 – BillK 2014-12-07 00:54:00

1

正如我們已經在評論中指出,這是非常不推薦的客戶時間戳存儲到數據庫中,由於安全漏洞。一個相當不錯的折衷辦法是將時區偏移量(可從javascript訪問)保存到cookie中。

在JavaScript中,你可以閱讀在幾分鐘內抵消這樣的:

var offset = new Date().getTimezoneOffset(); 

一旦保存到一個cookie,它也是從你的PHP腳本訪問,使您能夠計算corret日期和時間字符串。

+0

漏洞?它只是一個整數。如果您驗證或清理數據(您應該總是**做任何情況),那麼不存在任何風險。使用客戶端時間戳(*和時區,就此而言*)唯一的缺點是它可能不正確。對此沒有太多可以做的事,實際上詢問用戶是否正確。 – 2014-12-07 01:00:53

+0

你是對的,但我認爲節省客戶時間戳是一個相當不愉快的解決方案。 – 2014-12-07 01:03:03

+0

是的,這並不理想。最好向用戶詢問他們的位置,然後根據此來計算時間。 – 2014-12-07 01:05:40