从 SQL 服务器到 PHP 的当前时间进行比较

Current time from SQL Server to PHP for compare

需要获取信息,EndDate 是否已过期(EndDate 是行,其中键入了有关购买用户溢价日期的信息)

connectuser2db();
$bile_sql = "SELECT EndDate FROM tbl_rfuser WHERE Serial = '" . $userdata['serial'] . "'";
if (!($bile_result = mssql_query($bile_sql))) {
    echo "Unable to select query the Billing table";
    exit;
 }

$bilel = mssql_fetch_array($bile_result);          
$userdata['Enddate'] = $bilel['EndDate'];
$t_logd = $bilel['EndDate'];

echo $t_logd;

结果类似于 Jul 14 2020 02:36:00:000PM(如果 EndDate 为 smalldatetime 数据类型)

$time = date("Y-m-d H:i:s");

echo $time;

结果类似于 2020-07-15 14:51:21

如果我在此行中使用 $time,它会将结束日期更新为当前时间:

$t_login = $userdata["lastlogintime"]; // last user login in game (from mssql) Jul 15 2020 02:36:00:000PM
$t_logd = $bilel['EndDate']; // Premium EndDate (from mssql) Jul 14 2020 02:36:00:000PM
$time = date("Y-m-d H:i:s"); // current time (from php) like 2020-07-15 14:51:21
 if( $t_logd <= $t_login ) 
 { connectuser2db();
$user_update = "UPDATE tbl_rfuser SET EndDate='" . $time . "' WHERE Serial= '" . $userdata["serial"] . "'";
 mssql_query($user_update); }

它成功地比较了“lastlogin”和“enddate”,如果帐户是新的或用户在 EndDate 过期之前最后一次在线 - 将 EndDate 更改为当前时间,则成功地从 $time 中获取。 但是如果用户在 EndDate 之后登录,它就不起作用

想要这个比较:

if( $t_logd <= $t_login ) //working now

更改为比较:

if( $t_logd <= $time ) // not working now

请帮忙 我如何从 mssql 获取当前时间或更改 $time 以进行比较? 试过 strtotime,但做不到(sql 服务器以毫秒为单位检查它,但我的 php 旧并且不能使用 date("Y-m-d H:i:s:v") 格式)

只需使用GETDATE:

UPDATE tbl_rfuser SET EndDate=GETDATE() WHERE Serial= ...

请注意,MSSQL PHP extension 在 PHP 5.3 的 Windows 上不再可用,并在 PHP 7.0.0 中删除,但如果您需要解决方案,您可以尝试以下操作:

  • 通过将 php.ini 文件中的 mssql.datetimeconvert 选项设置为 Off,指定如何从 SQL 服务器返回日期时间值。当此选项为 On 时,返回的日期时间值已转换为 SQL 服务器设置。当此选项为 Off 时,日期时间值以 YYYY-MM-DD hh:mm:ss 格式返回。
  • 使用 date_create() 创建和比较日期作为 PHP 日期时间对象。

下一个简化示例演示了这种方法(使用 PHP 5.2.9 测试):

<?php
// Connection
$server   = 'server,port';
$username = 'username';
$password = 'password';
$database = 'database';
$conn = mssql_connect($server, $username, $password);
if (!$conn) {
    echo "Error (sqlsrv_connect): ".mssql_get_last_message();
    exit;
}
mssql_select_db($database, $conn);

// Statement
$sql = "SELECT DATEADD(day, -1, GETDATE()) AS [DateTime]";
$stmt = mssql_query($sql, $conn);
if (!$stmt) {
    echo "Error (sqlsrv_query): ".mssql_get_last_message();
    exit;
}

// Results
while ($row = mssql_fetch_assoc($stmt)) {
    $datetime1 = date_create($row['DateTime']);
}
$datetime2 = date_create();

// Compare dates
echo ($datetime1 <= $datetime2) ? 'Result: <=' : 'Result: >';

// End
mssql_free_result($stmt);
mssql_close($conn);
?>