提问者:小点点

MySQL时间戳差异日不正确


我提出了这样的质疑。 除了白天,他们都算对了。 我该怎么修好呢?

SELECT IF(TIMESTAMPDIFF(YEAR, '2017-10-13 16:57:27', NOW()) > 0, 
          CONCAT(
              TIMESTAMPDIFF(YEAR, '2011-01-19 16:57:27', NOW()), ' yıl ',
              MOD(TIMESTAMPDIFF(MONTH, '2011-01-19 16:57:27', NOW()), 12), ' ay ',
              FLOOR(MOD(TIMESTAMPDIFF(DAY, '2011-01-19 16:57:27', NOW()), 30.4375)), ' gün ',
              MOD(TIMESTAMPDIFF(HOUR, '2011-01-19 16:57:27', NOW()), 24), ' saat ',
              MOD(TIMESTAMPDIFF(MINUTE, '2011-01-19 16:57:27', NOW()), 60), ' dakika ',
              MOD(TIMESTAMPDIFF(SECOND, '2011-01-19 16:57:27', NOW()), 60), ' saniye'
            ),

        IF(MOD(TIMESTAMPDIFF(MONTH, '2011-01-19 16:57:27', NOW()), 12) > 0, 
            CONCAT(
                MOD(TIMESTAMPDIFF(MONTH, '2011-01-19 16:57:27', NOW()), 12), ' ay ',
                FLOOR(MOD(TIMESTAMPDIFF(DAY, '2011-01-19 16:57:27', NOW()), 30.4375)), ' gün ',
                MOD(TIMESTAMPDIFF(HOUR, '2011-01-19 16:57:27', NOW()), 24), ' saat ',
                MOD(TIMESTAMPDIFF(MINUTE, '2011-01-19 16:57:27', NOW()), 60), ' dakika ',
                MOD(TIMESTAMPDIFF(SECOND, '2011-01-19 16:57:27', NOW()), 60), ' saniye'
            ),

        IF(FLOOR(MOD(TIMESTAMPDIFF(DAY, '2011-01-19 16:57:27', NOW()), 30.4375)) > 0, 
            CONCAT(
                FLOOR(MOD(TIMESTAMPDIFF(DAY, '2011-01-19 16:57:27', NOW()), 30.4375)), ' gün ',
                MOD(TIMESTAMPDIFF(HOUR, '2011-01-19 16:57:27', NOW()), 24), ' saat ',
                MOD(TIMESTAMPDIFF(MINUTE, '2011-01-19 16:57:27', NOW()), 60), ' dakika ',
                MOD(TIMESTAMPDIFF(SECOND, '2011-01-19 16:57:27', NOW()), 60), ' saniye'
            ),

        IF(MOD(TIMESTAMPDIFF(HOUR, '2011-01-19 16:57:27', NOW()), 24) > 0, 
            CONCAT(
                MOD(TIMESTAMPDIFF(HOUR, '2011-01-19 16:57:27', NOW()), 24), ' saat ',
                MOD(TIMESTAMPDIFF(MINUTE, '2011-01-19 16:57:27', NOW()), 60), ' dakika ',
                MOD(TIMESTAMPDIFF(SECOND, '2011-01-19 16:57:27', NOW()), 60), ' saniye'
            ),

        IF(MOD(TIMESTAMPDIFF(MINUTE, '2011-01-19 16:57:27', NOW()), 60) > 0, 
            CONCAT(
                MOD(TIMESTAMPDIFF(MINUTE, '2011-01-19 16:57:27', NOW()), 60), ' dakika ',
                MOD(TIMESTAMPDIFF(SECOND, '2011-01-19 16:57:27', NOW()), 60), ' saniye'
            ),

        IF(MOD(TIMESTAMPDIFF(SECOND, '2011-01-19 16:57:27', NOW()), 60) > 0, 
            CONCAT(
                MOD(TIMESTAMPDIFF(SECOND, '2011-01-19 16:57:27', NOW()), 60), ' saniye'
            ),

        'Yok'))))))
AS time

产出:9 Yiel 4 ay 28 Gün 18 saat 6 dakika 13 saniye

预计:9 Yiel 4 ay 29 Gün 18 saat 6 dakika 13 saniye


共1个答案

匿名用户

SET @start = '2011-01-19 16:57:27';
SET @finish = CURRENT_TIMESTAMP;
SELECT TIMESTAMPDIFF(YEAR,   @start,                                                          @finish) diff_years,
       TIMESTAMPDIFF(MONTH,  @start + INTERVAL TIMESTAMPDIFF(YEAR,   @start, @finish) YEAR,   @finish) diff_months,
       TIMESTAMPDIFF(DAY,    @start + INTERVAL TIMESTAMPDIFF(MONTH,  @start, @finish) MONTH,  @finish) diff_days,
       TIMESTAMPDIFF(HOUR,   @start + INTERVAL TIMESTAMPDIFF(DAY,    @start, @finish) DAY,    @finish) diff_hours,
       TIMESTAMPDIFF(MINUTE, @start + INTERVAL TIMESTAMPDIFF(HOUR,   @start, @finish) HOUR,   @finish) diff_minutes,
       TIMESTAMPDIFF(SECOND, @start + INTERVAL TIMESTAMPDIFF(MINUTE, @start, @finish) MINUTE, @finish) diff_seconds
;