Php 我应该使用什么数据类型在MySQL中为我的应用程序存储time()?

Php 我应该使用什么数据类型在MySQL中为我的应用程序存储time()?,php,mysql,datetime,Php,Mysql,Datetime,我计划使用php中的time()在我的网站上捕获用户发起的活动的开始和结束。我不确定这是否是捕获开始/结束时间的最佳方法。无论如何,数据将存储在MySQL中,但我也不确定应该使用什么数据类型。 根据我在stackoverflow上读到的答案,使用的数据类型取决于应用程序的用途 申请的目的 最简单的是,我想记录一个事件的开始、停止(和持续时间) 活动。可能使用time() 最复杂的是,我想根据时间绘制统计数据 用户做了一个特定的活动,他们花了多少时间做这个活动 活动(总计),以及何时最成功/最不成

我计划使用php中的time()在我的网站上捕获用户发起的活动的开始和结束。我不确定这是否是捕获开始/结束时间的最佳方法。无论如何,数据将存储在MySQL中,但我也不确定应该使用什么数据类型。 根据我在stackoverflow上读到的答案,使用的数据类型取决于应用程序的用途

申请的目的

  • 最简单的是,我想记录一个事件的开始、停止(和持续时间) 活动。可能使用time()
  • 最复杂的是,我想根据时间绘制统计数据 用户做了一个特定的活动,他们花了多少时间做这个活动 活动(总计),以及何时最成功/最不成功 成功等等,等等(都基于开始/结束时间)要做的事情 牢记用户将来自世界各地
  • 更多信息 如果某项活动重复进行,将为其制作新记录。记录将不会更新

    起初,我计划在MySQL中存储unix时间戳(作为整数数据类型?),但据我所知,这是一个坏主意,因为我将失去MySQL处理信息的许多能力。如果我将信息存储为DATETIME,但随后移动服务器,则所有时间都将根据服务器的本地时间进行更改。我发现令人困惑的是MySQL中的时间戳与unix时间戳不同——如果我使用time(),这就是我得到的

    我知道,对于某些系统,unix时间戳只能保存2038年之前的日期,但这不是一个问题(目前)

    问题:我应该使用time()来捕获用户发起的活动的开始和结束时间吗?根据应用程序的用途,
    我应该使用什么数据类型来存储用户启动活动的开始和停止?

    谢谢


    谢谢大家的回答。TBH我还不确定,所以我还在做一些研究。我选择时间戳选项是因为我确实希望使用UTC(GMT)存储我的信息。遗憾的是,我将失去一些MySQLs内置的时间函数。无论如何,再次感谢您的回答。

    使用DATETIME存储时间,使用
    date('Y-m-d H:i:s')
    获取存储时间的当前时间。获取此值时,将以此格式获取时间

    要将其转换为时间戳,请使用
    $timestamp=strotime($fetchedValue)
    以另一种格式显示,使用
    date('H:i',$timestamp)
    。阅读php日期手册中的格式


    时间戳只能存储1970年1月1日之后的值,因为它存储时区数据。 因此,如果您试图在1970年1月1日之前存储日期,最好使用DATETIME。


    坦率地说,只有当您在两台具有不同时区的机器之间主动同步原始数据时,时间戳才有用。如果您要到世界各地,MySQL几乎是一个不错的选择,因为它将时间存储为UTC而不是本地时间,所以如果在多个时区进行分析,DST更改不会给您带来问题


    以不改变DST的时区为基础可以挽救生命,在具有不同DST转换日期的多个时区之间转换确实会导致问题,例如,考虑在从夏到冬季的变化中发生两次的时间戳。

    @ ZekMMS,为什么推荐时间戳?因为它支持所有的<代码>日期时间>代码>特性,另外还知道时间间隔。谢谢您的回复。为什么推荐DATETIME而不是MySQL的时间戳?时间戳只能存储1970年1月1日之后的值,因为它存储时区数据。因此,如果您试图存储1970年1月1日之前的日期,最好使用DATETIME。时间戳,我同意它存储时区数据,但它只有在两台服务器群集在一起,但使用不同的数据时才有用。在任何情况下,你都可以使用php来适应it@SomeshMukherjee
    时间戳
    不存储时区数据,它以UTC存储所有数据,并在读取时自动从UTC转换为本地时区,在写入时自动从本地时区转换为UTC。时间戳的范围确实小于日期时间的范围。这就是我的意思,我的坏朋友。我有时过于简单化了