MCPcopy Create free account
hub / github.com/Moddable-OpenSource/moddable / fxDateSplit

Function fxDateSplit

xs/sources/xsDate.c:1488–1556  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1486}
1487
1488void fxDateSplit(txNumber value, txBoolean utc, txDateTime* dt)
1489{
1490 txInteger date, time, year, leap, month;
1491 const txInteger* monthsDays;
1492 date = (txInteger)c_trunc(value / mxDayMilliseconds);
1493 time = (txInteger)c_fmod(value, mxDayMilliseconds);
1494 if (time < 0) {
1495 date--;
1496 time += (txInteger)mxDayMilliseconds;
1497 }
1498 dt->offset = 0;
1499 dt->day = (date + 4) % 7;
1500 if (dt->day < 0)
1501 dt->day += 7;
1502 dt->milliseconds = time % 1000;
1503 time /= 1000;
1504 dt->seconds = time % 60;
1505 time /= 60;
1506 dt->minutes = time % 60;
1507 time /= 60;
1508 dt->hours = time;
1509 date += mxYearDays(1970 + mxYearsOffset);
1510 year = 400 * (date / mx400YearsDays);
1511 date %= mx400YearsDays;
1512 date--;
1513 year += 100 * (date / mx100YearsDays);
1514 date %= mx100YearsDays;
1515 date++;
1516 year += 4 * (date / mx4YearsDays);
1517 date %= mx4YearsDays;
1518 date--;
1519 year += date / mx1YearDays;
1520 date %= mx1YearDays;
1521 year -= mxYearsOffset;
1522 leap = mxIsLeapYear(year);
1523 date += leap;
1524 monthsDays = leap ? gxLeapYearMonthsDays : gxCommonYearMonthsDays;
1525 for (month = 0; month < 11; month++) {
1526 if (date < monthsDays[month + 1])
1527 break;
1528 }
1529 date -= monthsDays[month];
1530 dt->date = date + 1;
1531 dt->month = month;
1532 dt->year = year;
1533 if (!utc) {
1534 txNumber former = value;
1535 txInteger similar;
1536 c_time_t time;
1537 c_tm tm;
1538 similar = fxDateSimilarYear(year);
1539 if (similar != year) {
1540 dt->year = similar;
1541 value = fxDateMerge(dt, 1);
1542 }
1543 time = (txInteger)c_floor(value / 1000.0);
1544 tm = *c_localtime(&time);
1545 dt->milliseconds = c_floor(c_fmod(value, 1000.0));

Callers 3

fx_Date_auxFunction · 0.85
fxDateMergeFunction · 0.85

Calls 2

fxDateSimilarYearFunction · 0.85
fxDateMergeFunction · 0.85

Tested by

no test coverage detected