【问题标题】:Get date out of sql server datetime从sql server datetime中获取日期
【发布时间】:2011-02-03 05:15:20
【问题描述】:

我需要从 SQL Server datetime 获取日期,然后格式化日期。 (即01-Jan-2000)我正在使用 PHP。

目前,SQL 正在返回 2009-02-13 22:00:00.000

【问题讨论】:

  • 请务必考虑数据库是否使用 UTC(或其他 TZ,我强烈建议在数据中仅使用 UTC)以及如何呈现数据。实际日期可能会有所不同,具体取决于它的解释方式——请注意,日期中不存在 TZ 偏移量(sql 中的日期时间也不存在 :-)
  • @user569403: 你用什么 PHP 函数来解析这个日期? strtotime() 将正确解析此日期,即使它会删除微秒部分。如果在此字符串上直接使用date(),这是不可能的,因为date() 需要一个整数时间戳......奇怪的是,date() 有一个u 格式来返回微秒,即使date() 无法接受或解析floats。去图吧。

标签: php sql-server


【解决方案1】:
echo date('d-M-Y', strtotime($datetime_from_db));

【讨论】:

  • @user569403:$datetime_from_db 是查询返回的日期列。有关 strtotime() 可以采用哪些字符串的示例,请参见手册页:php.net/manual/en/function.strtotime.php。有关使用 date() 重新格式化日期的示例,如 Dan Grossman 的示例,请参阅 us.php.net/manual/en/function.date.php
  • 这就是我之前所做的,但它只打印 1-Jan-1970 ,现在我正在使用explode函数并从那个日期时间中获取日期部分。
  • 如果您收到 1-Jan-1970,这很可能意味着 $date_from_db 中的值不正确。如果您收到 1-Jan-1970,您可能应该将其打印到屏幕上以验证它是否符合您的预期
  • 我认为小数秒不是strtotime解析支持的格式,所以他需要从数据库中获取日期的子字符串。
  • 你是对的 - strtotime() 返回一个 int,所以即使它正确解析了 OP 的日期,它也不会返回微秒。
【解决方案2】:

您可以直接从 mySQL 查询中以任何您想要的格式汇集日期,

SELECT DATE_FORMAT(column_name, '%d-%b-%Y') FROM tablename

【讨论】:

    【解决方案3】:

    将此添加到conncetionInfo => 'ReturnDatesAsStrings'=>true

    $connectionInfo = array( "Database"=>"AdventureWorks", 'ReturnDatesAsStrings '=> true);

    【讨论】:

      猜你喜欢
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-21
      • 2022-01-20
      • 1970-01-01
      • 2014-07-12
      相关资源
      最近更新 更多