search

Home  >  Q&A  >  body text

php中关于microtime输出重复问题

在我的方法中不同地方输出 microtime() 结果显示时间一样

服务器信息

PHP中文网PHP中文网2818 days ago458

reply all(3)I'll reply

  • 阿神

    阿神2017-04-10 17:25:17

    microtime又不是unique,谁规定它不能输出一样的时间了?

    注:PHP的microtime直接采用了系统中gettimeofday函数的结果进行输出,没有进过任何缓存处理,如果结果一样,这锅PHP也不背。

    PHP 5.3.28 中 microtime 的实现

    static void _php_gettimeofday(INTERNAL_FUNCTION_PARAMETERS, int mode)
    {
        zend_bool get_as_float = 0;
        struct timeval tp = {0};
    
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &get_as_float) == FAILURE) {
            return;
        }
    
        if (gettimeofday(&tp, NULL)) {
            RETURN_FALSE;
        }
    
        if (get_as_float) {
            RETURN_DOUBLE((double)(tp.tv_sec + tp.tv_usec / MICRO_IN_SEC));
        }
    
        if (mode) {
            timelib_time_offset *offset;
    
            offset = timelib_get_time_zone_info(tp.tv_sec, get_timezone_info(TSRMLS_C));
                    
            array_init(return_value);
            add_assoc_long(return_value, "sec", tp.tv_sec);
            add_assoc_long(return_value, "usec", tp.tv_usec);
    
            add_assoc_long(return_value, "minuteswest", -offset->offset / SEC_IN_MIN);
            add_assoc_long(return_value, "dsttime", offset->is_dst);
    
            timelib_time_offset_dtor(offset);
        } else {
            char ret[100];
    
            snprintf(ret, 100, "%.8F %ld", tp.tv_usec / MICRO_IN_SEC, tp.tv_sec);
            RETURN_STRING(ret, 1);
        }
    }

    reply
    0
  • 阿神

    阿神2017-04-10 17:25:17

    微秒本来就是这样,记得老师讲过关于php算法精确的问题,它还是有误差的,具体的还是请楼下大神解答吧

    reply
    0
  • 阿神

    阿神2017-04-10 17:25:17

    <?php
    echo microtime();
    sleep(1);
    echo microtime();
    ?>

    reply
    0
  • Cancelreply