日期时间格式显示错误的日期

时间:2019-12-04 12:00:40

标签: php datetime

我遇到了一个奇怪的问题,它正在破坏一个发票脚本。我的付款日期为2019年8月31日,那么此人将在每周的同一天付款,这意味着这将是每个星期六。但是,当我用l格式化时,将其作为新的DateTime对象输入时,它表示星期日。 PHP是7.1

$fpd = new DateTime( date( 'Y-m-d 00:00:00', strtotime( '2019-08-31' ) ) );
var_dump( $fpd ); // returns 2019-08-31 00:00:00.000000 in the date section
echo $fpd->format( 'l' ); returns Sunday

怎么回事?这就是我吗?如果我格式化日期以显示得到此日期的日期(假设$ fpd如上)

echo $fpd->format( 'g:ia \o\n l jS F Y' ); returns 12:00am on Sunday 1st September 2019

如此困惑,怎么可能在24小时后的8月31日0h0m?

谢谢

编辑: 我应该指出我在英国使用WAMP64。我尝试使用php 7.0,但结果相同,由于代码符合php 7,因此php 5.6不是一个选项。我尝试只使用'Y-m-d',但是无论如何它可以将时间保存在DateTime对象中

$fpd = {DateTime)[3]
date => "2019-08-31 00:00:00.000000",
timezone_type => {int}3,
timezone => "Europe/London"

$fpd->format( 'l' ) still shows Sunday

进一步编辑: 将上面的代码中的(字符串)更正为var_dump。 在其自己的test.php文件中运行此独立程序可以正常工作,并将日期显示为星期六,但它使用的是UTC时区。

2 个答案:

答案 0 :(得分:0)

这将返回经过测试的星期六(Php 7.3)

public function up()
{
    Schema::table('questions', function (Blueprint $table) {
        $table->dropForeign('user_id');
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->change();
    });
}
public function down()
{
    Schema::table('questions', function (Blueprint $table) {
        $table->dropForeign('user_id');
        $table->foreign('user_id')->references('id')->on('users')->change();
    });
}

答案 1 :(得分:0)

因此,由于今天在时钟改变之后,才发现数学是错误的。我从头开始删除了所有代码,现在代码可以正常工作。指望@davidev和@Tschallacka指出正确的方向