Close Menu
    DevStackTipsDevStackTips
    • Home
    • News & Updates
      1. Tech & Work
      2. View All

      The Psychology Of Color In UX Design And Digital Products

      August 15, 2025

      This week in AI dev tools: Claude Sonnet 4’s larger context window, ChatGPT updates, and more (August 15, 2025)

      August 15, 2025

      Sentry launches MCP monitoring tool

      August 14, 2025

      10 Benefits of Hiring a React.js Development Company (2025–2026 Edition)

      August 13, 2025

      I flew Insta360’s new ‘Antigravity’ drone around Los Angeles, and it was impossible to miss a shot

      August 15, 2025

      The $100 open-ear headphones that made me forget about my Shokz

      August 15, 2025

      5 quick and simple ways to greatly improve the quality of your headphones

      August 15, 2025

      Installing a UPS battery backup saved my work PC – here’s the full story

      August 15, 2025
    • Development
      1. Algorithms & Data Structures
      2. Artificial Intelligence
      3. Back-End Development
      4. Databases
      5. Front-End Development
      6. Libraries & Frameworks
      7. Machine Learning
      8. Security
      9. Software Engineering
      10. Tools & IDEs
      11. Web Design
      12. Web Development
      13. Web Security
      14. Programming Languages
        • PHP
        • JavaScript
      Featured

      Maintaining Data Consistency with Laravel Database Transactions

      August 16, 2025
      Recent

      Maintaining Data Consistency with Laravel Database Transactions

      August 16, 2025

      Building a Multi-Step Form With Laravel, Livewire, and MongoDB

      August 16, 2025

      Inertia Releases a New Form Component

      August 16, 2025
    • Operating Systems
      1. Windows
      2. Linux
      3. macOS
      Featured

      Google’s Gemini AI had a full-on meltdown while coding — calling itself a fool, a disgrace, and begging for freedom from its own loop

      August 15, 2025
      Recent

      Google’s Gemini AI had a full-on meltdown while coding — calling itself a fool, a disgrace, and begging for freedom from its own loop

      August 15, 2025

      Take-Two hints at $100 price tag for Grand Theft Auto VI — will it deliver on value?

      August 15, 2025

      ChatGPT Go offers GPT-5, image creation, and longer memory — all for $5 (if you’re lucky enough to live where it’s available)

      August 15, 2025
    • Learning Resources
      • Books
      • Cheatsheets
      • Tutorials & Guides
    Home»News & Updates»CodeSOD: Leap to the Past

    CodeSOD: Leap to the Past

    May 8, 2025

    Early in my career, I had the misfortune of doing a lot of Crystal Reports work. Crystal Reports is another one of those tools that lets non-developer, non-database savvy folks craft reports. Which, like so often happens, means that the users dig themselves incredible holes and need professional help to get back out, because at the end of the day, when the root problem is actually complicated, all the helpful GUI tools in the world can’t solve it for you.

    Michael was in a similar position as I was, but for Michael, there was a five alarm fire. It was the end of the month, and a bunch of monthly sales reports needed to be calculated. One of the big things management expected to see was a year-over-year delta on sales, and they got real cranky if the line didn’t go up. If they couldn’t even see the line, they went into a full on panic and assumed the sales team was floundering and the company was on the verge of collapse.

    Unfortunately, the report was spitting out an error: “A day number must be between 1 and the number of days in the month.”

    Michael dug in, and found this “delight” inside of a function called one_year_ago:

    
    Local StringVar yearStr  := Left({?ReportToDate}, 4);
    Local StringVar monthStr := Mid({?ReportToDate}, 5, 2); 
    Local StringVar dayStr   := Mid({?ReportToDate}, 7, 2);
    Local StringVar hourStr  := Mid({?ReportToDate}, 9, 2);
    Local StringVar minStr   := Mid({?ReportToDate}, 11, 2);
    Local StringVar secStr   := Mid({?ReportToDate}, 13, 2);
    Local NumberVar LastYear;
    
    LastYear := ToNumber(YearStr) - 1;
    YearStr := Replace (toText(LastYear),'.00' , '' );
    YearStr := Replace (YearStr,',' , '' );
    
    //DateTime(year, month, day, hour, min, sec);
    //Year + Month + Day + Hour + min + sec;  // string value
    DateTime(ToNumber(YearStr), ToNumber(MonthStr), ToNumber(dayStr), ToNumber(HourStr), ToNumber(MinStr),ToNumber(SecStr) );
    

    We’ve all seen string munging in date handling before. That’s not surprising. But what’s notable about this one is the day on which it started failing. As stated, it was at the end of the month. But which month? February. Specifically, February 2024, a leap year. Since they do nothing to adjust the dayStr when constructing the date, they were attempting to construct a date for 29-FEB-2023, which is not a valid date.

    Michael writes:

    Yes, it’s Crystal Reports, but surprisingly not having date manipulation functions isn’t amongst it’s many, many flaws. It’s something I did in a past life isn’t it??

    The fix was easy enough- rewrite the function to actually use date handling. This made a simpler, basically one-line function, using Crystal’s built in functions. That fixed this particular date handling bug, but there were plenty more places where this kind of hand-grown string munging happened, and plenty more opportunities for the report to fail.

    [Advertisement]
    ProGet’s got you covered with security and access controls on your NuGet feeds. Learn more.

    Source: Read More 

    Facebook Twitter Reddit Email Copy Link
    Previous ArticleXigmaNAS – storage NAS distribution
    Next Article openSUSE rimuove l’ambiente desktop Deepin dai suoi repository software

    Related Posts

    News & Updates

    I flew Insta360’s new ‘Antigravity’ drone around Los Angeles, and it was impossible to miss a shot

    August 15, 2025
    News & Updates

    The $100 open-ear headphones that made me forget about my Shokz

    August 15, 2025
    Leave A Reply Cancel Reply

    For security, use of Google's reCAPTCHA service is required which is subject to the Google Privacy Policy and Terms of Use.

    Continue Reading

    Paid proxy servers vs free proxies: Is paying for a proxy service worth it?

    News & Updates

    Representative Line: Identifying the Representative

    News & Updates

    Digital Transformation of Medical Documentation: PDF.js, At.js, and AI Transcription in Healthcare CRM Systems and Patient Appointment Apps

    Web Development

    CVE-2025-4292 – MRCMS Cross-Site Scripting Vulnerability

    Common Vulnerabilities and Exposures (CVEs)

    Highlights

    Stratbook – strategies, tips, and tricks

    July 19, 2025

    Help gamers improve and share their knowledge. The post Stratbook – strategies, tips, and tricks…

    I tried Google’s new agentic IDE, and it blows away the popular VS Code – here’s how

    July 30, 2025

    CVE-2025-3224 – Docker Desktop for Windows Elevation of Privilege Vulnerability

    April 28, 2025

    GAAD and Universal Design in Pharmacy – A Deeper Look

    May 21, 2025
    © DevStackTips 2025. All rights reserved.
    • Contact
    • Privacy Policy

    Type above and press Enter to search. Press Esc to cancel.