在 PHP 中向通过 sqlsrv_fetch_array 返回的日期添加天数

Adding Days to a date returned through sqlsrv_fetch_array in PHP

最初,当我使用 php_msssql 扩展程序时,以下行有效

$test2_date = date('d-M-y', strtotime( "".$res["test_date"]." +".$noofdays." days" ));

$res 是数组。

然后我更改为 php_sqlsrv_53_ts_vc9 扩展,由于上面的行无法工作,因为 "date" 在这个扩展中不起作用,所以我使用了 "date_format" 在 sqlsrv 中工作。我的代码行如下所示

$test2_date = date_format(strtotime( "".$res["test_date"]." +".$noofdays." days" ), 'd-M-y');

但是 strtotime 不工作,因此我得到以下错误:-

Catchable fatal error: Object of class DateTime could not be converted to string.

我应该用什么来给日期加上天数?

date_format take date object as first parameter. So need to create date object with date_create先。代码应该是:

$date = date_create($res["test_date"]);
date_add($date, date_interval_create_from_date_string(" +" . $noofdays . " days"));
echo date_format($date, "d-M-y");

更新: 如果您已经有日期对象,则可以跳过 date_create 步骤,代码如下:

date_add($res["test_date"], date_interval_create_from_date_string(" +" . $noofdays . " days"));
echo date_format($date, "d-M-y");

如果您想将日期和时间类型(datetime、date、time、datetime2 和 datetimeoffset)检索为字符串,您有以下选项:

将连接选项 ReturnDatesAsStrings 设置为 false 并格式化返回的日期字段值。这是默认设置。

$server = 'server\instance,port';
$cinfo = array(
    "ReturnDatesAsStrings"=>false,
    "Database"=>'database',
    "UID"=>"user",
    "PWD"=>"password"
);
...
$test2_date = date_format(date_add($res["test_date"], date_interval_create_from_date_string($noofdays." days")), 'd-M-y')
...

将连接选项 ReturnDatesAsStrings 设置为 true

$server = 'server\instance,port';
$cinfo = array(
    "ReturnDatesAsStrings"=>true,
    "Database"=>'database',
    "UID"=>"user",
    "PWD"=>"password"
);
...
$test2_date = date_format(date_add(date_create($res["test_date"]), date_interval_create_from_date_string($noofdays." days")), 'd-M-y')
...

可以找到更多信息 here