PHP 日期时间安全

亨德森

在我的脚本中,我想获得今天的月份和上个月,所以我这样做:

date_default_timezone_set('UTC');
$month = date('Ym');
$lastmonth = date('Ym', strtotime('first day of -1 month');

这有多安全?是否有可能在第二行和第三行之间,时间发生了变化(新的一个月开始),因此它两次返回同一个月份?我知道可能性很小,但我正在处理一个可能有如此多交易的系统。

我认为一个安全的选择是:

date_default_timezone_set('UTC');
$dt = new DateTime();
$month = $dt->format('Ym');
$dt2 = $dt; // to save $dt for later use
$lastmonth = $dt2->modify('first day of -1 month')->format('Ym');

但这真的有必要还是有更好的方法?

加布里埃尔·赫明

正如@silkfire 评论的那样,您的第二个示例已经是最安全/首选的方法。但是,有一些事情/提示需要解释。

首先,正如@MateiMihai 所提到的,您正在另一个变量中复制/保存一个对象。在这种情况下,您应该使用 clone 而不是引用副本:

$dt = clone $dt;

你的代码将是:

date_default_timezone_set('UTC');
$dt = new DateTime();
$month = $dt->format('Ym');
$dt2 = clone $dt; // to save $dt for later use
$lastmonth = $dt2->modify('first day of -1 month')->format('Ym');

此外,如果您必须保留原始对象,您应该使用DateTimeImmutable并调整您的代码(不需要$dt2变量)

date_default_timezone_set('UTC');
$dt = new DateTimeImmutable();
$month = $dt->format('Ym');
$lastmonth = $dt->modify('first day of -1 month');//It's a new object with the new date
echo $lastmonth->format('Ym');

另外,就个人意见而言,我更喜欢“可读性更好”的方法,因为:

$dt->modify('first day of last month');

结果完全一样。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PHP 获取当前日期时间 + 一年(还询问是否安全)

来自分类Dev

PHP日期时间格式

来自分类Dev

PHP日期时间戳

来自分类Dev

PHP 日期时间错误| date_create() [function.date-create]:依赖系统的时区设置是不安全的

来自分类Dev

英国的PHP日期时间格式

来自分类Dev

PHP脚本中的日期时间

来自分类Dev

PHP日期和时间警告

来自分类Dev

PHP中的日期时间格式

来自分类Dev

PHP中的日期/时间验证

来自分类Dev

英国的PHP日期时间格式

来自分类Dev

用PHP解析日期时间

来自分类Dev

如何设置日期时间PHP?

来自分类Dev

PHP转换日期时间格式

来自分类Dev

日期时间破坏代码 PHP

来自分类Dev

PHP - 日期和时间的差异

来自分类Dev

在PHP中添加时间戳或日期时间

来自分类Dev

PHP日期时间到时间戳

来自分类Dev

Android日期时间通过PHP转换为MySQL日期时间

来自分类Dev

将datepicker日期时间转换为php日期时间

来自分类Dev

在PHP中更改ISO日期时间格式

来自分类Dev

日期比较仅考虑时间(PHP)

来自分类Dev

PHP日期转换为时间戳

来自分类Dev

如何使用PHP PDO保存日期时间

来自分类Dev

在PHP中为日期时间添加小时

来自分类Dev

PHP DateTime解析时间而不是日期

来自分类Dev

日期时间比较PHP / Mysql?

来自分类Dev

PHP的日期时间差异返回零

来自分类Dev

PHP中的印度日期和时间

来自分类Dev

使用PDO的PHP Mysql日期时间搜索