【问题标题】:Change timestamp in a date更改日期中的时间戳
【发布时间】:2013-11-21 16:57:01
【问题描述】:

首先 - 我是个菜鸟,所以我什至不知道我这样称呼它是否正确。

当然,这也会影响我在搜索时获得的结果。到目前为止,我还没有找到我要找的东西。

除此之外,我的第一语言不是英语...

但是这里是:

我有一个使用 mySQL 的预订日历。显然,php date 函数出现了问题,并且在服务器上修补了一些东西。这会导致不会显示任何预订。

我将其缩小到存储在 mySQL 中的日期中的时间戳:

旧版本的时间是格林威治标准时间 23:00 新版本的时间为格林威治标准时间 00:00

通过从数据库中存储为开始日期和结束日期的数字中手动减去 82800,我能够显示预订。但是有很多预订,我一直在尝试找到一个解决方案,我可以运行 SQL 查询来更新所有预订。

I would need to test if the date ends in 23:00 GMT
If true, then subtract 82800
And go to the next post in the table

或者至少在那个领域。也许甚至有解决此问题的标准方法...

由于我对此完全陌生,请随时向我指出要搜索的正确内容或其他地方的解决方案链接。

我通过phpMyAdmin访问数据库。

【问题讨论】:

  • 日期列是时间戳?

标签: php mysql sql date


【解决方案1】:

假设您的列采用正确的日期时间格式,您可以在单个查询中完成。 (不过,请务必先备份。)

UPDATE your_table 
SET booking_time = DATE_SUB(booking_time, INTERVAL 23 HOUR)
WHERE booking_time LIKE '%23:00:00'

如果它使用 varchar,您可能会想要编写 PHP,这将花费更长的时间:

  1. 获取所有预订。
  2. 遍历它们。对于每次预订:
  3. 使用标准字符串函数检查预订是否为 23:00 GMT。
  4. 如果是,则提取日期时间并使用strtotime() 以 Unix 时间格式获取它。 (如果不是,则继续循环。)
  5. 从 Unix 时间值中减去 82800,然后使用 date() 将其重新格式化为所需的日期。
  6. 使用新的时间戳更新数据库中的预订行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    相关资源
    最近更新 更多