我正在使用 strftime 来显示 future 的日期。
但是在使用的时候
strftime('%a., %d. %B %Y',time()+60*60*24*4)
我今天使用它时得到的是 Mo., 01. April 2013 而不是 Su., 31. March 2013。
(Unix 时间戳为 1364423120)
strftime('%a., %d. %B %Y',time()+60*60*24*3)
显示正确的 Sa., 30. March 2013
三月的最后一天有什么问题?
最佳答案
时间戳表示本地时间 23:25:20。由于夏令时于 3 月 31 日生效,添加 96 小时将为本地时间 00:25:20,因此日期比预期晚一天。使用 gmstrftime 而不是 strftime 可以避免这个问题。
<?php
$timestamp = 1364423120;
echo strftime('%a., %d. %B %Y (%c %Z)', $timestamp)."\n";
echo strftime('%a., %d. %B %Y (%c %Z)', $timestamp +60*60*24*4)."\n";
echo gmstrftime('%a., %d. %B %Y (%c %Z)', $timestamp)."\n";
echo gmstrftime('%a., %d. %B %Y (%c %Z)', $timestamp +60*60*24*4)."\n";
给予
Wed., 27. March 2013 (Wed Mar 27 23:25:20 2013 CET)
Mon., 01. April 2013 (Mon Apr 1 00:25:20 2013 CEST)
Wed., 27. March 2013 (Wed Mar 27 22:25:20 2013 GMT)
Sun., 31. March 2013 (Sun Mar 31 22:25:20 2013 GMT)
关于php - strftime 得到错误的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15670763/