从电脑获取当前时间并将其保存在数据库中
Posted
技术标签:
【中文标题】从电脑获取当前时间并将其保存在数据库中【英文标题】:get current time from pc and save it in database 【发布时间】:2014-07-19 06:40:28 【问题描述】:我在 mysql 中有一个名为 apply(id, user, time_apply) 的数据库。我已将 time_apply 的结构设置为“datetime”
我有一个 php 脚本,它试图从用户的电脑中获取当前的 DATE 和 TIME 并将其存储在我的数据库中。用户的电脑可以在世界任何地方。
<?php
$timeString='
<script language="javascript">
var today = new Date();
document.write(today);
</script> ';
//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
知道怎么解决吗?
【问题讨论】:
您可以将字段(time_apply)声明为TIMESTAMP,并将属性声明为ON UPDATE CURRENT TIMESTAMP,而不是通过PHP添加数据。这样,在添加/更新数据时,该字段将具有更新的当前时间。 混合 PHP 和 JavaScript。 JavaScript 在客户端运行……到那时您已经执行了 SQL 查询。您需要将日期回传到 PHP,然后存储在数据库中。 @Prava OP 想要存储客户端的 PC 日期时间,而不是他自己的服务器 DATATIME。 您需要使用 AJAX 或 Javascript 将时间添加到表单中的隐藏字段。 为什么PC上的时间和服务器上的时间不一样?现在每个人都应该运行时间同步软件。 【参考方案1】:丑陋的编码(但这就是你想要的):)
$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);
</script> ';
echo "INSERT INTO `apply` VALUES ('test', '1', '$timeString') ";
输出
INSERT INTO `apply` VALUES ('test', '1', ' 05/29/2014 22:50:4 ')
【讨论】:
看起来不错...请回答最后一个问题。这需要用户的 PC 日期时间吗?因为我想获取用户的日期时间而不是我的服务器。我之前在 php 中使用 now(),但那是使用服务器的时间。 是的,这里我们通过 javascript 获取用户系统时间,而不是服务器时间【参考方案2】:我不知道您为什么要捕获客户的时间,但您可以这样做。
首先,您需要将 javascript 和 php 脚本分开。你可以让 php 输出 javascript,但不能像你写的那样。
您可以创建一个隐藏元素,只要您选择的 javascript 事件触发,该元素就会被设置。我使用了提交按钮的 onclick 事件,您可以使用 page_load 或其他任何东西。然后,您可以从 php $_POST 变量集合中提取该值。
<script language="javascript">
function submit_OnClick()
document.getElementById("clientDate").value = currentdate.getDate() + "/"
+ (currentdate.getMonth()+1) + "/"
+ currentdate.getFullYear() + " @ "
+ currentdate.getHours() + ":"
+ currentdate.getMinutes() + ":"
+ currentdate.getSeconds();
</script>
<?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 日期的分析,请参阅此相关帖子:
Getting current date and time in JavaScript
【讨论】:
【参考方案3】:你完全误解了 PHP 和 JS 的运作方式。您在上面的 sn-p 中没有任何实际的 JS 代码。你有一个 PHP STRING 恰好包含一些看起来像 Javascript 的文本。
但是由于 PHP 完全不知道 JS 是什么,更不用说执行它了,你实际上是将 JS 代码作为日期值填充到 MySQL 中。 MySQL 当然是在说“这到底是什么”并将其丢弃为默认的 0000-00-00 “提供的错误日期”值。
记住:PHP 在服务器上执行,JS 在客户端上执行。
当服务器端数据库完全能够生成自己的日期时,绝对有没有理由让客户端生成用于服务器端数据库的日期:
INSERT ... VALUES(..., now());
^^^^^---literally all you need.
【讨论】:
OP想要存储客户端的PC日期时间而不是他自己的sql server DATATIME dont want now() 将存储我的服务器日期时间...我想将位于世界任何地方的用户电脑的日期和时间存储在我的数据库中。 请注意,此评论关于 PHP 和 JS 的操作方式是正确的。【参考方案4】:1) 您可以将字段 (time_apply) 声明为 TIMESTAMP,并将属性声明为 ON UPDATE CURRENT TIMESTAMP,而不是通过 PHP 添加数据。这样,在添加/更新数据时,该字段将具有更新的当前时间。
2) 否则你可以使用 $timeString = date('Y-m-d H:i:s');插入当前时间的值。
3) 否则,您可以在编写脚本时对字段值使用 NOW() 方法。
【讨论】:
CURRENT_TIMESTAMP
将获取服务器时间,而不是客户端时间。
OP想要存储客户端的PC日期时间而不是他自己的服务器DATATIME
now() 会给我服务器的日期和时间。我想存储用户的电脑日期和时间
然后可以手动使用 as $timeString = date('Y-m-d H:i:s');以上是关于从电脑获取当前时间并将其保存在数据库中的主要内容,如果未能解决你的问题,请参考以下文章
js获取当前当前年月日时分秒,以及获取年月日(无时分秒),详情见补充!