PHP 日期和 POSIX 日期

PHP Date and POSIX date

我有两个日期(来自数据时间选择器),我使用 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 号。

怎么了?

正如评论中所说,那是由于 winter/summer 时间。