【问题标题】:PHP Date and POSIX datePHP 日期和 POSIX 日期
【发布时间】: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 日期,例如 14905692002017-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 格式设置我的所有日​​期,它会解决我的问题;感谢您的回复! :)

标签: php date posix


【解决方案1】:

正如评论中所说,这是由于冬季/夏季时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-31
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    相关资源
    最近更新 更多