0

需要在 PHP 脚本中使用用户的本地时间来发送电子邮件 - 如何从 JS 获取数据并在我的 php 中使用它?

理想情况下,这会让我得到我需要的时间:

var now = new Date();
var hrs = now.getHours();
var msg = "";

if (hrs >  0) msg = "Mornin' Sunshine!"; // REALLY early
if (hrs >  6) msg = "Good morning";      // After 6am
if (hrs > 12) msg = "Good afternoon";    // After 12pm
if (hrs > 17) msg = "Good evening";      // After 5pm
if (hrs > 22) msg = "Go to bed!";        // After 10pm

alert(msg);

但我需要知道如何在 PHP 脚本中使用来自 JS 变量的数据。这发生在用户提交联系表单之后,所以我可以收集用户访问表单的时间,然后在我真正需要使用它之前将其传递给 php。AJAX 会是我的解决方案吗?我只是第一次学习 AJAX,但据我所知,它具有这种功能。

4

1 回答 1

1

如果您希望在提交表单时发送日期,则不需要 Ajax。你可以做一些事情,比如在你的表单中有一个隐藏的输入字段,当表单提交时,它使用你的脚本来查找时间并将字段值设置为那个(然后将通过 PHP 发布)。

看着你的例子让我印象深刻,虽然你应该只使用PHP 的内置日期函数,你可以更改时区等。如果你希望时区会经常为你的客户改变,最好至少通过 Javascript 传递时区但是可能是整个日期。

其他选项,在第一次访问您的网站时,您可以运行我们在此处讨论的类似脚本 - 使用 Javascript 获取用户的日期/时间,甚至可能使用 Ajax 将其发送到 PHP 脚本,该脚本将时区偏移保存到一个会话,以便您可以随时使用它。例如

<?php

// example script...
if( !isset($_SESSION['timezone_offset'])) : ?>
<script>
// javascript here to get 'client_datetime' etc

// ajax here to post the 'client_datetime' to yourscript.php
</script>
<?php endif; ?>

-- yourscript.php
<?php

if( isset($_POST['client_datetime']) ) {

$server_time = strtotime( date('Y-m-d H:ia') );
$client_time = strtotime( $_POST['client_datetime'] );

$offset = $server_time - $client_time;

$_SESSION['timezone_offset'] = $offset;

}

?>

-- whenever you want to use date or time in PHP:

<?php

// clients date and time
echo date('Y-m-d H:ia', strtotime(date('Y-m-d H:ia')) + $_SESSION['timezone_offset']);

?>

很多选项...我想说最简单的方法是使用 Javascript 将其附加到您的表单 onSubmit() 以便它成为在您的 PHP 中使用的 post 变量。

如果您确实想使用 Ajax 将其发送到 PHP,请确保在 PHP 接收到它时设置一个会话并且不要再次请求 - 向服务器发送多个请求以检索相同的数据是没有意义的!

于 2013-10-07T21:07:31.043 回答