2017-03-17 87 views
0

我面临一个unix时间戳,PHP和MySQL的问题,如果有人可以向我解释我出错或如果我不是那么为什么我得到我得到的数字。PHP的UNIX时间戳不迭代到相同的值

当我使用jquery datepicker将year-month-date格式中的日期传递给php时,时间戳中23:00:00的默认时间和分钟被设置,尽管我没有在这个时间戳中传递这个信息请求。所以我的问题是这个幻像23:00:00出现在哪里?

工作流程:

使用日期选择器:日期选择器 - > PHP - >的MySQL = TIMESTAMP已时间设定在23点00分00秒。

没有使用datepicker: php-> mysql = TIMESTAMP具有正确的小时和分钟。

感谢您的阅读。

编辑:根据要求PHP代码:

PHP code: 

$setdatealpha = $_POST['datepickeralpha']; 
$setdatealpha = strtotime($setdatealpha); 

// With this, I am inserting into MySQL like so: 


$sql = "INSERT INTO TABLE (DATE_FIELD) VALUES (?)"; 
$stmt = $mysqli->prepare($sql); 
$stmt->bind_param('s',$setdatealpha); 
$stmt->execute(); 

现在,当我读到输入的信息回来了,它通过日期转换日期时间格式(“YM-d”,时间戳),日期录入正确,时间输入具有23:00:00的值。

这不会发生,如果我通过strtotime(日期)做标准转换;

+0

你能在这里粘贴PHP代码处理它 – daheda

回答

2

根据目前可用的信息,我建议您确保每个时间戳都是UTC。我总是遇到时区问题。

对于PHP,如:$current_timestamp = strtotime($date." UTC");
jQuery的日期选择器,我发现这个计算器线程:How to obtain utc time in jQuery datetimepicker

+1

尼斯尖。但是,请注意(如果不谨慎使用),这可能会导致网站用户进入例如'3月30日',并且'3月29日'回来了,这至少会让人困惑。您必须每次使用相同的时区。 –

1

最有可能的时区。

首先,让我们来澄清一下上下文。 strtotime()产生一个Unix时间戳,你显然用DATE_FIELD提供。如果可行,这意味着该列是INTEGER。在这种情况下,你之后正在做一些事情来显示日期,并且你没有共享那部分 - 另外,MySQL在这里是无辜的,因为它甚至不知道什么是DATE_FIELD意味着日期。

虽然strtotime()可以喂食一个原始日期,但它也需要生成时间。除非知道时区,否则无法做到这一点。另外,如果你有一个带有Unix时间戳的整型变量,并且你想把它显示为正确的日期,你还需要知道时区。

在这两种情况下,如果你不提供它PHP将使用默认值:

var_dump(date_default_timezone_get()); 

所以你可能要设置一个已知的一个与例如date_default_timezone_set()。但是,您的用户可能与您的时区不同,因此您的用户对他们没有任何意义。由于您提示用户输入原始日期(没有时间),因此可能该时间实际上与问题无关。在这种情况下,你可能想:

  1. DATE类型的DATE_FIELD
  2. 避免strtotime()和类似的东西。您可能需要使用checkdate()