Replies: 27 comments
-
Your date objects look good, it would be interesting to see the value of $converted_format. For GB date it should be like d/m/y h:mi:s . I am ready to bet it is OK. |
Beta Was this translation helpful? Give feedback.
-
The value of $converted_format is the same for both. |
Beta Was this translation helpful? Give feedback.
-
Here is the code I modified in ...\admin\stats_sales_report_graphs.php after line 112, it won't work for you but might gives you an idea:
For British local you can't test on language but important part is in substring function values. The code above works for Japanese and English US. Locale and date format settings in languages files are important too of course, the code above completely depends on it. |
Beta Was this translation helpful? Give feedback.
-
I think you can pass my precedent post. I realized the substring stuff is only for cosmetic display and can be removed in many case as $report->info[] returns already formated parts of dates.
Should be :
Try modifying this. y is standard and Y is for year in “week of year”. |
Beta Was this translation helpful? Give feedback.
-
Thanks for taking the time to respond/your interest. Consequently I've been looking at it and gradually homing in on the cause, but yes this has fixed it:
Should be :
Please PR!! |
Beta Was this translation helpful? Give feedback.
-
Another factor of consideration here where a *nux system is compared to a windows system is the potential that the windows system supports database data return of integers and floats may truly come back as integers and floats instead of text. May I suggest going to the admin side catalog and observing if all of the product and categories appear to be disabled, though on the catalog side at least some of those are active. It would at least eliminate a potential issue caused by some sort of strict comparison somewhere in the associated code. |
Beta Was this translation helpful? Give feedback.
-
Eh? the last few comments have disappeared...including the fix for this issue! |
Beta Was this translation helpful? Give feedback.
-
Please just pass on precedent post. I realized it is just for cosmetic display. Problem is from some date format setting somewhere using year in “week of year” instead of standard year. I think I found it but you have to test that. In classe zcDate.php replace lines 114-115 :
by :
or :
The upper case Y in intldate object is for year in “week of year”. It should be lowercase! I did not have this problem because I use my modified zcDate classe... |
Beta Was this translation helpful? Give feedback.
-
Strange when I came back to see if you posted something It had disappeared but I wrote it and sent it again. I will PR this one with success I hope but after some sleep. |
Beta Was this translation helpful? Give feedback.
-
Nevermind, I've done it. |
Beta Was this translation helpful? Give feedback.
-
i'm still not convinced here. this should be an "easy" test. here is the code:
now change the locale and the format so that you are getting '22' for year. and report back. and if you can reproduce that, then give us the results of:
i'm not saying you are wrong, but i am not able to reproduce it, i find it hard to imagine a system reporting back you can see that the intl date format uses iso date format codes, and capital |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
Here is the zcDate debug. I note the locale is always "C", and at the end, the misbehaving output "ene 22" has a different timestamp to the rest.
|
Beta Was this translation helpful? Give feedback.
-
[18-Jan-2023 16:49:00 Europe/Madrid] zcDate output for '%b %y' with timestamp (1672527600), with format converted to 'MMM YY': '"ene 22"' is the problem no? being able to replicate this can allow us to fix it. but until we can replicate this timestamp and output, there will be no fix! |
Beta Was this translation helpful? Give feedback.
-
and going to the previous page, which is the monthly for the previous year: |
Beta Was this translation helpful? Give feedback.
-
that is the problem timestamp and format. the question is what is the locale set to. |
Beta Was this translation helpful? Give feedback.
-
get rid of this and please stop posting images. |
Beta Was this translation helpful? Give feedback.
-
'"ene 22"' is the problem What's the problem with images? |
Beta Was this translation helpful? Give feedback.
-
do you want help or not? images suck here. can not copy timestamps of which i had already narrowed it down to the one i quoted above. i'm trying to narrow down a problem and you are now trying to widen it out. this is a windows server that you are having problems with? |
Beta Was this translation helpful? Give feedback.
-
To be honest I don't care. I'm reporting a problem and providing as much information as I can. |
Beta Was this translation helpful? Give feedback.
-
I hope everybody cooled down. I have the solution and I am going to explain it.
What made the problem more difficult to identify is that this year (2023) January the first is on Sunday. In the us_EN locale Sunday is although the first day of the week which means whatever parameter you use, y or Y, results are identical. Finally to get a time stamp mktime function is generally used but it is dependent on PHP default time zone, not what is set in date object. Getting a time stamp at 0h might not be 0h at all. For example, I am at GMT +9, If I set Date object time zone to 'Europe/Madrid' and use I made a small PHP script for illustration and testing on your system. Looking at Internet forums, it seems it is sometimes difficult to set locale and time zone on Centos systems. Please try this :
|
Beta Was this translation helpful? Give feedback.
-
Very enlightening! LOCAL/WindowsYour system (PHP) time zone is Europe/Madrid Locale = en_US Pattern = yy : Locale = en_US Pattern = YY : Locale = en_US.utf8 Pattern = yy : Locale = en_US.utf8 Pattern = YY : Locale = en Pattern = yy : Locale = en Pattern = YY : Locale = English_United States.1252 Pattern = yy : Locale = English_United States.1252 Pattern = YY : Locale = en_GB.utf8 Pattern = yy : Locale = en_GB.utf8 Pattern = YY : Locale = es_ES.UTF8 Pattern = yy : Locale = es_ES.UTF8 Pattern = YY : Locale = es-ES Pattern = yy : Locale = es-ES Pattern = YY : Locale = Spanish_Spain.1252 Pattern = yy : Locale = Spanish_Spain.1252 Pattern = YY : Locale = es Pattern = yy : Locale = es Pattern = YY : REMOTE/CentosYour system (PHP) time zone is Europe/Madrid Locale = en_US Pattern = yy : Locale = en_US Pattern = YY : Locale = en_US.utf8 Pattern = yy : Locale = en_US.utf8 Pattern = YY : Locale = en Pattern = yy : Locale = en Pattern = YY : Locale = English_United States.1252 Pattern = yy : Locale = English_United States.1252 Pattern = YY : Locale = en_GB.utf8 Pattern = yy : Locale = en_GB.utf8 Pattern = YY : Locale = es_ES.UTF8 Pattern = yy : Locale = es_ES.UTF8 Pattern = YY : Locale = es-ES Pattern = yy : Locale = es-ES Pattern = YY : Locale = Spanish_Spain.1252 Pattern = yy : Locale = Spanish_Spain.1252 Pattern = YY : Locale = es Pattern = yy : Locale = es Pattern = YY : Note that I do not advocate any effort to be made to account for Windows server behaviour, that is of academic interest only. |
Beta Was this translation helpful? Give feedback.
-
Except something.1252 locales everything is as it should be. On my Win 10 system, something.1252 is not recognized and locale revert to system default (Japanese for me). I am not sure these are valid locales. |
Beta Was this translation helpful? Give feedback.
-
I don't necessarily see it (especially based on the provided data) as being a windows, centos, or *nux specific issue. The link previously provided: https://framework.zend.com/manual/1.12/en/zend.date.constants.html#zend.date.constants.selfdefinedformats discusses this issue of using |
Beta Was this translation helpful? Give feedback.
-
Just to have the same reference and avoid confusion, the link above are ref. for old date object I think, not sure, but this is not what is used by datefmt_format(). Intl Date object uses similar parameters but different. Info on this hard to find in PHP manual but here is the link for IntlDateFormatter::format (alias datefmt_format()) format string parameters: |
Beta Was this translation helpful? Give feedback.
-
Just to add precision on when 'bug' might appear here are information on 52-53 week year system. |
Beta Was this translation helpful? Give feedback.
-
For simulation of concerned dates use this script in your PHP command line (not in browser). It is an updated version of the one posted above. On Windows systems this dates will be displayed with different color. Choose the year by modifying variable at beginning of the script. You can loop through 12 years if you uncomment the for loop at the beginning and end of file.
|
Beta Was this translation helpful? Give feedback.
-
Hosting: php 8.1.4, Centos
Local: php 8.1.4/8.2, Windows
Identical database.
I've dug down as far as here, from where the error originates:
zencart/includes/classes/zcDate.php
Lines 175 to 182 in 5fb07cf
Echoing the $this->dateObject->getCalendarObject()
Hosting/Bad:
Local/Good:
Note that the only difference is the Local uses en_GB and Hosting en and the weeks of the year are different!
So I manually used en_GB instead of $this->locale and
Hosting: locale changed as expected to en_GB, and weeks of year at 2 and year at Jan 22.
Local: although the locale was already/previously en_GB, the weeks of year changed to 2 and output to Jan 22: it should not have changed at all!
I'm not doing any more on this.
Beta Was this translation helpful? Give feedback.
All reactions