php - mysql 和 PHP 的日期时间

标签 php mysql datetime

我有一个任务是通过 PHP 从 csv 文件读取日期时间并将它们存储在 mysql 数据库中。 csv文件中的日期时间有两种格式,第一种是DD/MM/YYYY HH:mm:ss AM/PM ,第二个是MM-DD-YYYY HH:mm:ss AM/PM 。然后,我需要选择一些行,因为它们的日期时间在某个时期内。

看起来有点困惑。我的脑子里有几个问题:

  1. 很容易在mysql表中设置varchar类型来存储它们。但它 稍后很难选择一些行,因为我需要转换 首先将字符串转换为日期时间,然后检查特殊的数据之间是否有数据 期间。

  2. 另一个解决方案是将这些日期时间从字符串转换为 存储在数据库之前由 PHP 生成的日期时间。然后就很容易 稍后选择数据。但第一步也有点复杂。

不知道大家对于这个问题有没有什么好的想法,或者有类似问题的经验。

最佳答案

首先:永远不会永远 永远将日期或日期时间作为字符串存储在数据库中。

从来没有。

明白了吗?

您应该始终将它们转换为数据库的内置 datedatetime 数据类型。

如果不这样做,以后将会给你带来非常非常大的打击。例如,想象一下,如果它们保存为字符串,特别是当它们采用不同的格式时,尝试让数据库按日期顺序对它们进行排序。如果您可以确定一件事,当您在数据库中获得日期时,您将需要根据给定日期之前、之后或之前的条目来查询它。如果您不需要对它们执行此类操作,那么首先存储日期就没有多大意义,因此即使尚未要求您执行此操作,也请将其视为给定的稍后会被要求。因此,始终始终始终将它们存储在正确的数据类型中,而不是存储为 varchar。

接下来,您需要处理的混合格式。

这太疯狂了。

我厌恶并厌恶 PHP 的 strtotime()功能。它很慢,有一些不幸的怪癖,通常应该被视为过去的遗产而不是使用。然而,在这种情况下,它可能会拯救你。

strtotime() 旨在接受未知格式的日期字符串,对其进行解析,并输出正确的时间戳。显然,它必须处理 dd-mm-yyyymm-dd-yyyy 格式的存在。它通过查看分隔符来猜测您指的是两个中的哪一个来实现此目的。

如果日期字符串使用斜杠作为分隔符,则假定格式为mm/dd/yyyy。如果它使用破折号,则假定为dd-mm-yyyy。这是使 strtotime() 在正常使用中变得如此痛苦的小怪癖之一。但这里是你的 friend 。

它的工作方式实际上与您在问题中指定的格式完全相反。但对你有帮助应该足够了。如果您在输入字符串中切换斜杠和破折号,并将结果传递给 strtotime() ,那么根据您在问题中描述的方式,它应该在所有情况下都会生成正确的时间戳。

它应该足够简单,可以将它们正确保存在数据库中。

但是我强烈建议对此进行非常非常彻底的测试。如果它在沿线的某个地方破裂,也不会感到惊讶。如果您以不一致的格式提供数据,那么实际上没有任何方法可以保证它始终不一致。您的程序基本上只需要尽力处理不良数据即可。

您还需要对输入数据的质量提出一些严重的问题。在这种情况下,任何程序都不能可靠地工作。向提供该产品的人明确表示该产品还不够好。如果程序因错误数据而中断,那是他们的错,而不是你的错。

关于php - mysql 和 PHP 的日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12204930/

相关文章:

php - MYSQL使值选择php

php - 使用php从数据库中获取多行

python - 以毫秒为单位的纪元时间转换为日期时间

php - 子类别不显示在选择菜单中

Python SQL Select 语法,中间有变量

java - 将自 01-01-1900 以来的秒数转换为巴西时间戳

R lubridate 包日期时间创建省略了午夜时间

php - Apache - PHP 文件返回黑色,php 文件显示中甚至没有 HTML

php - 两个看似相同的查询在使用计数(分页)时返回不同的结果

mysql - Django MySQL 全文搜索