DateTime类与本机PHP日期函数

Ano*_*ous 22 php strtotime

DateTime类肯定有一些方便的方法,似乎整体优于像本地的PHP日期函数strtotime,mktime以及strftime(及以上).但是,我不应该使用它有任何缺点或原因吗?

我能想到的唯一原因是创建一个类的整个实例可能比使用一个函数更昂贵.

  • 你同意吗?
  • 将DateTime对象用于简单的东西是否有意义?
  • 还有其他缺点吗?

在这两个选项之间切换似乎有点令人困惑,所以我想要清除我应该做的事情.

我的决定有两个例子:

  • 将日期转换为本地化值
  • 计算两个日期之间的时间

N.B*_*.B. 43

如果你担心创建一个类实例是昂贵的并且它会阻碍性能,那么我担心你会在错误的树上吠叫.人们不应该考虑是否在有意义的地方使用经过验证的OO方法.如果使用DateTime类来执行某些日期计算是有意义的,那么使用它.除非你做一些疯狂的事情,比如创建100万个DateTime对象,否则你的应用程序会感觉到这一点并不昂贵.

DateTime很棒的原因是因为它通过在创建对象时指定时区来减轻夏令时的担忧.在日期之间获得差异或获得不同对象之间的间隔也很容易.它基本上减少了所需的担忧和编码量(但我承认它有时是错误的,希望它能在5.4版本的PHP中得到解决).

底线 - 我总是使用它.

  • 加上日期范围,即使在32位PHP环境中,也足以让古生物学家或宇宙学家研究宇宙的开始或结束 (6认同)
  • 可悲的是,大多数错误都没有被5.4修复.https://bugs.php.net/bug.php?id=40743 https://bugs.php.net/bug.php?id=49914 https://bugs.php.net/bug.php?id= 51051 https://bugs.php.net/bug.php?id=51557 https://bugs.php.net/bug.php?id=52480 https://bugs.php.net/bug.php?id = 54340 https://bugs.php.net/bug.php?id=54655 https://bugs.php.net/bug.php?id=55253 https://bugs.php.net/bug.php? id = 60873 https://bugs.php.net/bug.php?id=60960 https://bugs.php.net/bug.php?id=61022 https://bugs.php.net/bug.php ?id = 61311 https://bugs.php.net/bug.php?id=61530 https://bugs.php.net/bug.php?id=61955 (6认同)
  • 我会,因为我们需要`mktime`或`strtotime`函数 - 它们需要一定的参数顺序来表示日,年,月,小时等.使用`DateTime`我可以使用任意参数创建对象,例如`$ date = DateTime :: createFromFormat('m H:s D-Y',$ weird_user_input);`然后可以将其格式化为unix时间戳或我希望的任何其他日期格式.我甚至可以在创建对象时立即指定时区.所以,是的,我肯定会使用它,因为我没有真正看到程序方式可以帮助我更好. (4认同)
  • @nclsvh你应该测量,即使创建一百万个日期时间对象现在也不是牵强的——硬件更好,我们有php 7.2等。但是,这取决于你要如何处理这些对象。您始终可以创建 1 个 DateTime 对象并设置不同的时间戳等。由于您可以从字面上衡量您的情况会发生什么,因此您不必依赖我的意见。这是我在 vagrant VM 上运行的一个小测试结果 - 创建 100 万个 DT 对象,花了 0.88 秒。TL;DR: 就去做吧:) (2认同)