Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我们什么时候选择日期时间而不是时间戳_Php_Mysql_Sql_Datetime_Unix Timestamp - Fatal编程技术网

Php 我们什么时候选择日期时间而不是时间戳

Php 我们什么时候选择日期时间而不是时间戳,php,mysql,sql,datetime,unix-timestamp,Php,Mysql,Sql,Datetime,Unix Timestamp,由于我大部分时间都在使用php和mysql或pgsql,因此我将使用DateTime作为DateAPI的通用词。在php中没有“日期”、“时间”、“日期时间”和“日期时间偏移” 随着我开发web应用程序越来越精细,我大部分时间都使用DateTime,但有时我想知道它是否真的是我想要的。 例如,我只想显示今天的日期(例如,当我想存储论坛或博客帖子时),没有计算,没有提供过滤器,没有迭代。。。那么为什么我要在date()函数上使用\DateTime 我看到它简单地描述了每种技术的优点 但这并不能真正

由于我大部分时间都在使用php和mysql或pgsql,因此我将使用DateTime作为DateAPI的通用词。在php中没有“日期”、“时间”、“日期时间”和“日期时间偏移”

随着我开发web应用程序越来越精细,我大部分时间都使用DateTime,但有时我想知道它是否真的是我想要的。 例如,我只想显示今天的日期(例如,当我想存储论坛或博客帖子时),没有计算,没有提供过滤器,没有迭代。。。那么为什么我要在
date()
函数上使用
\DateTime

我看到它简单地描述了每种技术的优点

但这并不能真正回答这个问题。在PHP中,在DateTime对象中再抛出2个字节,在我的数据库中再抛出2个字节,因为它允许我使用
DATE\u INTERVAL
API(在PHP中,它是
DateInterval
)和IntlDateFormatter,这真的是一种损失吗

此外,这篇文章说unix_时间戳是从1970年保留的。但这不符合逻辑,一些测试证明了这一点:

echo date('d/m/Y',time(-1));
回音'31/12/1969'!这是合乎逻辑的。32位无符号整数从0变为4294967295,68年内只有近20亿秒,因此整数是有符号的,“负时间戳”必须存在

另一个对我来说非常重要的想法是,我每次都选择DateTime,因为我想处理日期,而不是整数。DateTime是日期,时间戳不是!我发现时间戳的唯一意义是我想要对文件名进行时间标记的时间,因为在cas中时间戳是时间戳

然而,仍然存在一个问题:时区处理。 由于MySQL和其他数据库在将日期存储为DateTime时不处理时区,目前,我使用时区集成作为“filter in escape out”的转义部分

这条路对吗?存储一个简单的时间戳,然后获取好的本地时间不是更好吗


因此,以下是问题的摘要:

  • 在真正简单地使用API(仅显示)时,多2个字节的DateTime是一种损失吗
  • 是时候放弃unix_时间戳了吗
  • 存储一个简单的时间戳,然后获取好的本地时间不是更好吗

不是对你问题的准确答案,但我会选择
时间戳
而不是
日期时间
,因为我相信处理
整数
值比处理
日期时间
值更具成本效益(测量CPU的处理时间)

当我在
二进制机器上拥有
数字
,而不是拥有
字符串
对象
时,我感到非常舒服

人与机器的较量

<> > <强>可理解性<强>,我要说的是,当我为计算机编写程序时,我会认为我正在编写一个<代码>机器>代码>,但是如果在该层上的抽象可以帮助人类更好地理解它,当性能不是问题时,我们为什么不使用它呢

我不记得是谁说的,也不记得在哪里听到的,但有人说人们讨厌计算机,但他们应该讨厌程序员,我完全同意这一点。因此,作为一名人类,我仍然尊重这台机器,并将努力制作计算机更容易理解的程序。:)

更新:

为了更好地描述它,假设我们有一个处理“日期”的程序,每分钟处理10000次,对吗

// it LOOKS Better
$date = new DateTime();
$date->setDate(1986, 3, 24);   // March 24, 1986
echo $date->format('Y-m-d');

// it WORKS Better
echo date("Y-m-d", mktime(0, 0, 0, 3, 24, 1986));    // March 24, 1986
假设我每周要看一个小时的代码,假设有10000人需要24/7/365处理,当然我不会处理,这是机器的任务


顺便说一下,我想再次指出,如果性能不是问题,那么为什么我们不让程序员更容易理解呢?如果我们需要最大限度地利用它,那么让程序员看看
工作得更好的代码,而不是
看起来更好的代码。
!:)

正如我在评论中所说的,我相信这主要是因为个人偏好。在我看来,在当今世界,使用Unix时间戳和“遗留”非OOP接口并不是实现这一点的方式,例如,我们不(读:不应该)在数据库中使用
INT
数据类型以Unix时间戳格式存储日期,相反,我们应该使用数据库的本机类型,通常是
DATE
DATETIME
类型,当涉及到标准转换时,它与PHP的
DATETIME
对象(和其他语言)几乎本机合作

详细阐述一下我所说的标准转换的含义:当您使用MySQL并将值拉回到PHP时,您会得到一个ISO格式的日期字符串,
DateTime
类在其构造函数中解析该字符串,从而为您提供一个立即可用的对象。相反,要使用Unix时间戳路径,您必须使用
strotime
,然后使用
date
将其转换为您本机想要的任何格式

我之前提到过PHP系统和.NET系统之间的互操作。虽然使用时间戳不会导致任何具体问题,但这并不是实际的解决方案,同样,我们使用一个数据库,它返回一个可以直接发送的日期时间值。如果我们要将其转换为unix时间戳,以便在PHP内部使用,那么如果我们要发送响应,或者向.NET应用程序(或者在本例中我应该说是API)发送响应,那么我们还必须将其转换回来,这是一个时间戳,并在最后进行转换。通过全面使用
DateTime
,它减少了任何转换的需要,并且整个开发过程更容易

最后要补充的是,正如你在文章中提到的,你得到了t
// it LOOKS Better
$date = new DateTime();
$date->setDate(1986, 3, 24);   // March 24, 1986
echo $date->format('Y-m-d');

// it WORKS Better
echo date("Y-m-d", mktime(0, 0, 0, 3, 24, 1986));    // March 24, 1986