关于javascript:从pc获取当前时间并将其保存在数据库中

get current time from pc and save it in database

我在mysql中有一个名为apply(id,user,time_apply)的数据库。 我已将time_apply的结构设置为"datetime"

我有一个PHP脚本,它试图从用户的PC获取当前的DATE和TIME并将其存储在我的数据库中。 用户的电脑可以在世界任何地方。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

$timeString='
<script language="javascript">
var today = new Date();
document.write(today);
 ';

//id is my database primary key, so I don'
t insert anything inside

mysql_query("INSERT INTO `apply` VALUES ('', '$session_user_id', '$timeString')");


?>

问题是在mysql_query执行后,我无法在我的数据库中插入当前用户的日期和时间。 我得到类似的东西:0000-00-00 00:00:00

知道怎么解决吗?


我不知道为什么你想要抓住客户的时间,但这就是你要怎么做的。

首先,您需要分离您的javascript和php脚本。你可以有php输出javascript但不是你编写的方式。

您可以创建一个隐藏元素,只要您选择的javascript事件触发,该元素就会被设置。我使用了提交按钮的onclick事件,你可以使用page_load或其他什么。然后,您可以从php $ _POST变量集合中提取该值。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<script language="javascript">
function submit_OnClick() {
    document.getElementById("clientDate").value =  currentdate.getDate() +"/"
            + (currentdate.getMonth()+1)  +"/"
            + currentdate.getFullYear() +" @"  
            + currentdate.getHours() +":"  
            + currentdate.getMinutes() +":"
            + currentdate.getSeconds();
     }
 


<?php

$timeString=$_POST["clientDate"];
mysql_query("INSERT INTO Apply (id, user, time_apply) VALUES ('', '$session_user_id', '$timeString')");

?>

<form method="post">
    <input type='hidden' id='clientDate' />
    <input type="submit" value="submit" id='submitForm' OnClick="submit_OnClick();"/>
    <!-- The rest of your form goes here -->
</form>

有关更多选项和javascript日期分析,请参阅此相关帖子:

在JavaScript中获取当前日期和时间


丑陋的编码(但这是你想要的):)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$timeString='
<script language="javascript">
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth()+1; //January is 0!
var yyyy = today.getFullYear();

if(dd<10) {
    dd="0"+dd
}

if(mm<10) {
    mm="0"+mm
}

today = mm+"/"+dd+"/"+yyyy +"" +today.getHours() +":" + today.getMinutes()+":" + today.getSeconds();
document.write(today);
 '
;


echo"INSERT INTO `apply` VALUES ('test', '1', '$timeString')";

产量

1
INSERT INTO `apply` VALUES ('test', '1', ' 05/29/2014 22:50:4 ')


1)您可以将字段(time_apply)声明为TIMESTAMP,而将属性声明为ON UPDATE CURRENT TIMESTAMP,而不是通过PHP添加数据。因此,在添加/编辑数据时,该字段将具有更新的当前时间。

2)否则你可以使用$ timeString = date('Y-m -d H:i:s');插入当前时间的值。

3)否则,您可以在编写脚本时使用NOW()方法为该字段提供值。


您对PHP和JS的运行方式有一个完全的误解。您上面的代码段中没有任何实际的JS代码。你有一个PHP STRING,其中包含一些看起来像Javascript的文本。

但是因为PHP绝对不知道JS是什么,更不用说执行它了,你真的把你的JS代码填充到MySQL作为日期值。 MySQL当然是在说"这到底是什么",并将其丢给默认的"提供的错误日期"值。

记住:PHP在服务器上执行,JS在客户端上执行。

当服务器端数据库完全能够生成自己的日期时,绝对没有理由让客户端生成在服务器端数据库中使用的日期:

1
2
INSERT ... VALUES(..., now());
                       ^^^^^---literally all you need.