【发布时间】:2017-03-28 18:28:41
【问题描述】:
我有两个日期(来自数据时间选择器),我使用 PHP 中的 post 发送到同一页面(我在表单中使用隐藏的 <input>)。
$(function(){
flatpickr('#calendar',{
mode: "range",
onChange: function(dates) {
if(dates.length>1){
$("#formdate .from").val(+dates[0]/1000);
$("#formdate .to").val((+dates[1])/1000);
$("#formdate").submit();
}
}
});
});
这些日期是 POSIX 日期,例如 1490569200 是 2017-03-27 00:00:00。
您可以看到我将它们除以 1000;这是因为我在 MySQL 中使用它们,所以它需要在 second 而不是 millisecond。
这是我的日期时间选择器:
当我验证第二个日期(这里是 26 日)时,它会调用上面的函数并刷新页面。如果我回显我的 POSIX 日期,我会得到以下信息:
1488326400, 1490486400 分别是 3 月 1 日和 26 日(正常行为)。现在我在 PHP 中使用以下函数将它们转换为可读格式:
echo date('l jS \of F Y',$from);
echo date('l jS \of F Y',$to);
它向我显示以下内容:
Wednesday 1st of March 2017
Sunday 26th of March 2017
所以直到这里,一切正常!
但是现在如果我选择一个等于或高于 3 月 27 日 的日期,就会发生这种情况:
我回显了我的 POSIX 日期:
1490313600, 1490655600 分别是 24 号和 28 号(所以没问题)。
但是当我使用 PHP 日期作为可读格式时:
echo date('l jS \of F Y',$from);
echo date('l jS \of F Y',$to);
Friday 24th of March 2017
Monday 27th of March 2017
确实,我选择的每个等于或大于 27 日的日期都会显示为前一天。
如果我使用echo date('l jS \of F Y',1490655600),同样的问题,它会给我 27 号而不是 28 号。
怎么了?
【问题讨论】:
-
“怎么了?” - 有人从未听说过冬/夏时间。
-
哦,天哪...我花了好几个小时试图理解为什么它不起作用,而且事情就是这么简单...你知道如何在 PHP 中处理这个问题吗?
-
听起来您的 PHP 代码不尊重大多数国家/地区在那个周末从冬季时间到夏季时间的转换(周日 26 日凌晨 02:00 变为凌晨 03:00),而您的 Javascript 代码正在考虑到这一点。如果在日期格式中添加小时和分钟,3 月 27 日 00:00 的日期是否显示为 3 月 26 日 23:00? 编辑有人打败了我:-)
-
我想我会使用 YYYYMMDD 格式设置我的所有日期,它会解决我的问题;感谢您的回复! :)