2014-12-07 223 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