Jak*_*ake 2 php time datetime date
我有一个小片段,格式化时间戳的日期,如下所示: (YYYY-MM-DD H:M:S T ) Ex: 2011-09-29 17:00:46 EST or 2011-09-29 17:00:46 EDT
我想将EST和EDT转换为ET并显示ET,因此用户不必担心Dayligt的节省.我怎么做?
$timeZone = new DateTimeZone('America/New_York');
$processedDate = str_replace(".000000", "", $timestamp);
$dateTime = new DateTime($processedDate, new DateTimeZone('GMT'));
$dateTime->setTimezone($timeZone);
$processedDate = $dateTime->format('Y-m-d H:i:s') . ' ' . $dateTime->format('T');
echo processedDate;
Run Code Online (Sandbox Code Playgroud)
谢谢
你想要做的事情是不实际的,会导致你的用户讨厌你.
命名时区背后的全部原因是准确地表示当地时间.将"标准"时间表示为本地区域在DST内的本地时间是客观上不正确的.在该时区内读取时间的任何人都会被误导.
如果您需要存储和处理忽略时区的日期和时间,则使用UTC进行此目的,即存储和普通数学.值得记住的是,即使是优秀的旧Unix时间戳也是"1970年1月1日午夜过夜".
如果您需要表示用户本地的时间,那么您应该允许他们选择他们的本地时区,并在显示时进行转换.现代PHP的DateTime和DateTimeZone使这简单.从交互式提示:
php > $utc = new DateTimeZone('UTC');
php > $amla = new DateTimeZone('America/Los_Angeles');
php >
php > $two_past_midnight = new DateTime('2011-04-05 00:02', $utc);
php > $two_past_midnight->setTimeZone($amla);
php > echo $two_past_midnight->format('Y-m-d H:i:s');
2011-04-04 17:02:00
Run Code Online (Sandbox Code Playgroud)
没有乱,没有大惊小怪.当我们切换时区时,它为我们完成了数学运算.
或者,如果你真的,真的,真的想要展平DST时区,请将getTransitions和getOffset与各种时区date()格式结合使用,尤其是我.您可以查看并生成结果信息,以查找下一个DST区域的"标准"版本何时转换并相应地进行调整.请记住,不同的区域在不同的时间过渡,并非所有区域都转换相同的数量......有些区域根本不会过渡.我觉得有人提到过印第安纳州.
通常我也会在这里提供示例代码,但是日期数学让我对暴力的永不满足的渴望.无论谁决定60,60,24,7,4-6,6和52是可以接受的思考时间和日期的方式,都是邪恶的,邪恶的人.值得庆幸的是,他们已经死了几百到几千年.