【问题标题】:How to select date and time from oracle date field using php date function如何使用 php 日期函数从 oracle 日期字段中选择日期和时间
【发布时间】:2012-12-11 06:32:09
【问题描述】:

如何从存储为 12/25/2012 5:12:05 AM 的日期开始计算时间。

date('l F j, Y, g:i a',strtotime($last_login_details[FL_DATETIME]));

上述函数返回时间为上午 12:00,应该返回上午 5:12。

FL_DATETIME 的数据类型为 DATE。

在数据库中,值是这样存储的:

   12/25/2012 5:12:05 AM

【问题讨论】:

  • 它正在使用 PHP 5.3.19 为我返回 Tuesday December 25, 2012, 5:12 am
  • 我认为 PHP 版本并不重要。只是注意到当我回显 $last_login_details[FL_DATETIME] 时它只返回 25-DEC-12
  • 小心! PHP 应该抛出警告和通知,因为它会自动为您更正无效的语法。您的error_reporting 级别可能不够高。考虑一直到 -1。

标签: php sql oracle


【解决方案1】:

首先,在我看来,您应该将所有日期存储为 unix 时间戳。这使您可以更轻松地对时间进行搜索,并消除可能由日期字符串操作引起的任何不一致。

第二,我测试了你的代码;据我所知,它看起来还不错。回显您在 $last_login_details[FL_DATETIME] 变量中得到的内容。问题可能在于变量赋值,而不是日期字符串操作。

希望有帮助!

【讨论】:

  • 当我回显 $last_login_details[FL_DATETIME] 时给出 25-DEC-12
  • 这就是为什么你会得到你得到的结果。如果 PHP 的 date 函数实际上没有得到时间(例如:日期是 25-DEC-12),它会自动将时间默认为午夜。所以 25-DEC-12 变成了 2012 年 12 月 25 日星期二上午 12:00。
  • 我知道了,但您可以在上面看到,该值存储在 DB 中,例如 12/25/2012 5:12:05 AM。
  • 这很好,但这不是变量 $last_login_details[FL_DATETIME] 所持有的。如果要进行完全匹配,则必须将该确切日期存储在 $last_login_details[FL_DATETIME] 变量中。否则你永远不会得到完全匹配。
【解决方案2】:

解决了我的问题:

SELECT TO_CHAR(FL_DATETIME, 'DD.MM.YYYY:HH24:MI:SS') FROM "FMS_LOG" 

【讨论】:

    【解决方案3】:

    根据文档 - http://docs.oracle.com/cd/B19306_01/server.102/b14220/datatype.htm#i1847 -

    对于日期的输入和输出,标准的Oracle日期格式是DD-MON-YY

    这很可能是$last_login_details[FL_DATETIME]25-DEC-12 相呼应的原因

    尝试使用TO_CHAR()更改您的查询

    SELECT TO_CHAR(FL_DATETIME, 'MM/DD/YYYY HH24:MI:SS A.M.') AS FL_DATETIME ...
    

    http://infolab.stanford.edu/~ullman/fcdb/oracle/or-time.html#date格式

    【讨论】:

    • 那么你的意思是,即使它存储在像dd-mm-yy hm:mm:ss这样的数据库中,它也只显示日期而不显示时间?
    猜你喜欢
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 2013-10-02
    • 1970-01-01
    • 2019-06-20
    相关资源
    最近更新 更多