Bug #64681 [NEW]: Fix Win / Linux problems with strftime
| From: | Uwe at Familie-Loyal dot de | Date: | Sat, 20 Apr 2013 06:56:40 +0000 |
| Subject: | Bug #64681 [NEW]: Fix Win / Linux problems with strftime | ||
| Groups: | php.bugs | ||
| Request: | Send a blank email to php-bugs+get-178549@lists.php.net to get a copy of this message | ||
From: Uwe at Familie-Loyal dot de
Operating system: Win32
PHP version: Irrelevant
Package: *Web Server problem
Bug Type: Bug
Bug description:Fix Win / Linux problems with strftime
Description:
------------
---
From manual page: http://www.php.net/function.strftime
---
I develope an function to fix Problems/bug of strftime in Windows (XAMPP).
Test script:
---------------
function strftime_win32($format, $ts = null) {
if (!$ts) $ts = time();
$mapping = array(
'%C' => sprintf("%02d", date("Y",
$ts) /
100),
'%D' => '%m/%d/%y',
'%e' => sprintf("%' 2d",
date("j", $ts)),
'%h' => '%b',
'%n' => "\n",
'%r' => date("h:i:s", $ts) . " %p",
'%R' => date("H:i", $ts),
'%t' => "\t",
'%T' => '%H:%M:%S',
'%u' => ($w = date("w", $ts)) ? $w : 7
);
$format = str_replace(
array_keys($mapping),
array_values($mapping),
$format
);
if($format=='%V' or $format=='%G' or $format=='%g'){
// When strftime("%V") fails, some unoptimized
workaround
//
// http://en.wikipedia.org/wiki/ISO_8601 : week 1
is "the week with the year's first Thursday in it (the formal ISO
definition)"
$year = strftime("%Y", $ts);
$isoyear=$year;
$first_day = strftime("%w", mktime(0, 0, 0, 1, 1,
$year));
$last_day = strftime("%w", mktime(0, 0, 0, 12, 31,
$year));
$number = $isonumber = strftime("%W", $ts);
// According to strftime("%W"), 1st of january is
in week 1 if and only if it is a monday
if ($first_day == 1) {
$isonumber--;
}
// 1st of january is between monday and thursday;
starting (now) at 0 when it should be 1
if ($first_day >= 1 && $first_day <= 4){
$isonumber++;
$isoyear=$year;
}elseif ($number == 0){
$isonumber = mktime(0, 0, 0, 12, 31, $year
- 1);
$isoyear=$year;
}
if ($isonumber == 53 && ($last_day == 1 ||
$last_day == 2 || $last_day == 3)){
$isonumber = 1;
$isoyear=$year+1;
}
if ($format=='%V') {
return sprintf("%02d", $isonumber);
}elseif ($format=='%G'){
return sprintf("%04d", $isoyear);
}elseif ($format=='%g'){
return substr(sprintf("%04d",
$isoyear),-2);
}
}else{
return strftime($format, $ts);
}
}
--
Edit bug report at https://bugs.php.net/bug.php?id=64681&edit=1
--
Try a snapshot (PHP 5.4): https://bugs.php.net/fix.php?id=64681&r=trysnapshot54
Try a snapshot (PHP 5.3): https://bugs.php.net/fix.php?id=64681&r=trysnapshot53
Try a snapshot (trunk): https://bugs.php.net/fix.php?id=64681&r=trysnapshottrunk
Fixed in SVN: https://bugs.php.net/fix.php?id=64681&r=fixed
Fixed in release: https://bugs.php.net/fix.php?id=64681&r=alreadyfixed
Need backtrace: https://bugs.php.net/fix.php?id=64681&r=needtrace
Need Reproduce Script: https://bugs.php.net/fix.php?id=64681&r=needscript
Try newer version: https://bugs.php.net/fix.php?id=64681&r=oldversion
Not developer issue: https://bugs.php.net/fix.php?id=64681&r=support
Expected behavior: https://bugs.php.net/fix.php?id=64681&r=notwrong
Not enough info: https://bugs.php.net/fix.php?id=64681&r=notenoughinfo
Submitted twice: https://bugs.php.net/fix.php?id=64681&r=submittedtwice
register_globals: https://bugs.php.net/fix.php?id=64681&r=globals
PHP 4 support discontinued: https://bugs.php.net/fix.php?id=64681&r=php4
Daylight Savings: https://bugs.php.net/fix.php?id=64681&r=dst
IIS Stability: https://bugs.php.net/fix.php?id=64681&r=isapi
Install GNU Sed: https://bugs.php.net/fix.php?id=64681&r=gnused
Floating point limitations: https://bugs.php.net/fix.php?id=64681&r=float
No Zend Extensions: https://bugs.php.net/fix.php?id=64681&r=nozend
MySQL Configuration Error: https://bugs.php.net/fix.php?id=64681&r=mysqlcfg