From the C Standard:
7.21.2.4 The strncpy function
If copying takes place between objects that overlap, the behavior is undefined.
What is overlapping?
It is clear that it is overlapping when the beginning of the destination string crosses the ending of the source string.
But is overlapping taking place in the next example?
const char* dateConst = "2017-01-25";
char* date = malloc(16);
strcpy(date, dateConst);
strncpy(date+4, date+5, 2);
strncpy(date+6, date+8, 3);
printf("%s\n", date);
Output: 20170125
If strncpy just copyes symbols char by char like it is in this implementation, there should be no problem.