我想在特定时区中获取当前日期的昨天的日期。我试过这样,但它不工作:
$date = new DateTime(NULL, new DateTimeZone('Pacific/Wake'));
$yesterday = $date->modify( '-1 day' );
$yesterday = $yesterday->format('Y-m-d');
Run Code Online (Sandbox Code Playgroud)
我仍然得到今天的日期。
根据该modify()方法的文档,此问题似乎完全取决于您使用的 php 版本。在这种情况下,根据先前链接的文档上的更改日志,方法链接(这是您尝试执行的操作)仅在 php 5.3.0 及更高版本上可用。
考虑到这一点,它解释了为什么您的代码不起作用,而@Deryck 却起作用了。如果您曾经升级过 php 版本,或者让您的主机升级它,您可能会将这三行减少到两行:
$date = new DateTime(NULL, new DateTimeZone('Pacific/Wake'));
$date = $date->modify( '-1 day' )->format('Y-m-d');
Run Code Online (Sandbox Code Playgroud)
我意识到这并没有太大的改进,但这是它失败的原因。
以下是我看到的两种解决方法;一个是创建一个类......对我来说这似乎有点矫枉过正,除非这是更宏伟的东西的一部分......另一个是创建一个函数。从某种意义上说,两者都将多余的线条推到了占用更少空间的地方。
class DT {
private $now; //can be null
private $timezone; //DateTimeZone object
public function __construct($tz_str, $now = NULL) {
$this->now = $now;
$this->timezone = new DateTimeZone($tz_str);;
}
public function mod($mod,$format) {
$dt = new DateTime($this->now, $this->timezone);
$dt->modify($mod);
return $dt->format($format);
}
}
function mod_formatted_zone($tz_str, $mod, $format, $now = NULL) {
$timezone = new DateTimeZone($tz_str);
$dt = new DateTime($now,$timezone);
$dt->modify($mod);
return $dt->format($format);
}
Run Code Online (Sandbox Code Playgroud)
两者的使用都很简单;在类的情况下,它会像..
$dt = new DT('Pacific/Wake');
echo $dt->mod('-1 day', 'Y-m-d');
Run Code Online (Sandbox Code Playgroud)
而在函数的情况下,它只是..
echo mod_formatted_zone('Pacific/Wake', '-1 day', 'Y-m-d');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7218 次 |
| 最近记录: |