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

      Google’s Agent2Agent protocol finds new home at the Linux Foundation

      June 23, 2025

      Decoding The SVG path Element: Curve And Arc Commands

      June 23, 2025

      This week in AI dev tools: Gemini 2.5 Pro and Flash GA, GitHub Copilot Spaces, and more (June 20, 2025)

      June 20, 2025

      Gemini 2.5 Pro and Flash are generally available and Gemini 2.5 Flash-Lite preview is announced

      June 19, 2025

      Summer Game Fest had a bit of a “weird” vibe this year — an extremely mixed bag of weak presentations and interesting titles

      June 24, 2025

      The Lenovo Legion Go 2 gets its first release date tease, which could be accurate — but treat with the biggest pinch of salt

      June 24, 2025

      Denmark will stick with Windows — government still plans to ditch Microsoft Office

      June 24, 2025

      OneDrive user locked out of “30 years worth of photos and work” without any support — calls Microsoft a “Kafkaesque black hole”

      June 24, 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

      Best PHP Project for Final Year Students: Learn, Build, and get Successful with PHPGurukul

      June 24, 2025
      Recent

      Best PHP Project for Final Year Students: Learn, Build, and get Successful with PHPGurukul

      June 24, 2025

      Community News: Latest PECL Releases (06.24.2025)

      June 24, 2025

      JSON module scripts are now Baseline Newly Available

      June 24, 2025
    • Operating Systems
      1. Windows
      2. Linux
      3. macOS
      Featured

      Summer Game Fest had a bit of a “weird” vibe this year — an extremely mixed bag of weak presentations and interesting titles

      June 24, 2025
      Recent

      Summer Game Fest had a bit of a “weird” vibe this year — an extremely mixed bag of weak presentations and interesting titles

      June 24, 2025

      The Lenovo Legion Go 2 gets its first release date tease, which could be accurate — but treat with the biggest pinch of salt

      June 24, 2025

      Denmark will stick with Windows — government still plans to ditch Microsoft Office

      June 24, 2025
    • Learning Resources
      • Books
      • Cheatsheets
      • Tutorials & Guides
    Home»News & Updates»CodeSOD: A Double Date

    CodeSOD: A Double Date

    May 5, 2025

    Alice picked up a ticket about a broken date calculation in a React application, and dropped into the code to take a look. There, she found this:

    export function calcYears(date) {
      return date && Math.floor((new Date() - new Date(date).getTime()) / 3.15576e10)
    }
    

    She stared at it for awhile, trying to understand what the hell this was doing, and why it was dividing by three billion. Also, why there was a && in there. But after staring at it for a few minutes, the sick logic of the code makes sense. getTime returns a timestamp in milliseconds. 3.15576e10 is the number of milliseconds in a year. So the Math.floor() expression just gets the difference between two dates as a number of years. The && is just a coalescing operator- the last truthy value gets returned, so if for some reason we can’t calculate the number of years (because of bad input, perhaps?), we just return the original input date, because that’s a brillant way to handle errors.

    As bizarre as this code is, this isn’t the code that was causing problems. It works just fine. So why did Alice get a ticket? She spent some more time puzzling over that, while reading through the code, only to discover that this calcYears function was used almost everywhere in the code- but in one spot, someone decided to write their own.

    if (birthday) {
          let year = birthday?.split('-', 1)
          if (year[0] != '') {
            let years = new Date().getFullYear() - year[0]
            return years
          }
    }
    

    So, this function also works, and is maybe a bit more clear about what it’s doing than the calcYears. But note the use of split– this assumes a lot about the input format of the date, and that assumption isn’t always reliable. While calcYears still does unexpected things if you fail to give it good input, its accepted range of inputs is broader. Here, if we’re not in a date format which starts with “YYYY-“, this blows up.

    After spending hours puzzling over this, Alice writes:

    I HATE HOW NO ONE KNOWS HOW TO CODE

    [Advertisement]
    Keep the plebs out of prod. Restrict NuGet feed privileges with ProGet. Learn more.

    Source: Read More 

    Facebook Twitter Reddit Email Copy Link
    Previous ArticleIranian APT Group Breaches Middle Eastern Critical Infrastructure in Stealth Campaign
    Next Article CVE-2025-4269 – TOTOLINK Log Handler Remote Code Execution Vulnerability

    Related Posts

    News & Updates

    Summer Game Fest had a bit of a “weird” vibe this year — an extremely mixed bag of weak presentations and interesting titles

    June 24, 2025
    News & Updates

    The Lenovo Legion Go 2 gets its first release date tease, which could be accurate — but treat with the biggest pinch of salt

    June 24, 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

    CVE-2025-45890 – Novel Plus Directory Traversal Code Execution Vulnerability

    Common Vulnerabilities and Exposures (CVEs)

    bookmarkmenu offers bookmark storage using the menu back end

    Linux

    Why the road from passwords to passkeys is long, bumpy, and worth it – probably

    News & Updates

    4 trends shaping open source funding—and what they mean for maintainers

    News & Updates

    Highlights

    Syntax Highlighting using the CSS Custom Highlight API

    April 28, 2025

    Comments Source: Read More 

    CVE-2025-4562 – “Apache HTTP Server Remote Code Execution”

    May 22, 2025

    Linkwarden – self-hosted collaborative book manager

    April 25, 2025
    Diablo 4 fans react poorly to its roadmap reveal — for things Blizzard should’ve already learned from

    Diablo 4 fans react poorly to its roadmap reveal — for things Blizzard should’ve already learned from

    April 9, 2025
    © DevStackTips 2025. All rights reserved.
    • Contact
    • Privacy Policy

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