@livelike/react-native
Version:
LiveLike React Native package
66 lines (56 loc) • 1.59 kB
text/typescript
const MONTHS = [
'Jan',
'Feb',
'Mar',
'Apr',
'May',
'Jun',
'Jul',
'Aug',
'Sep',
'Oct',
'Nov',
'Dec',
];
const pad = (n: number) => {
return n < 10 ? '0' + n : n;
};
const timeConvert24hTo12h = (value: string) => {
let time: any[] = value
.toString()
.match(/^([01]\d|2[0-3])(:)([0-5]\d)?$/) || [value];
if (time.length > 1) {
time = time.slice(1);
time[3] = +time[0] < 12 ? 'AM' : 'PM';
time[0] = +time[0] % 12 || 12;
}
return time.join('');
};
/**
* "JSC" compiler in Android doesn't not support ISO dateTime format in the form of "2022-05-26T07:32:50+0000"
* Although this format works in "hermes" js engine. Below Regex helps us to fix the unsupported date time format by
* converting it to "2022-05-26T07:32:50+00:00"
*/
const ANDROID_UNSUPPORTED_DATE_TIME_REGEX_FORMAT = new RegExp(
/[\d\-:T]+\+\d{4}$/
);
export const convertDateTime = (date: string) => {
let dateTimeObj = new Date(date);
if (!dateTimeObj.getDate()) {
if (ANDROID_UNSUPPORTED_DATE_TIME_REGEX_FORMAT.test(date)) {
dateTimeObj = new Date(
`${date.slice(0, date.length - 2)}:${date.slice(-2)}`
);
} else {
// In ideal case, this is Unreachable path but keeping convertDateTime util fn less strict
return '';
}
}
const formattedDate = `${dateTimeObj.getDate()} ${
MONTHS[dateTimeObj.getMonth()]
} ${dateTimeObj.getFullYear()}`;
const formattedTime = timeConvert24hTo12h(
`${pad(dateTimeObj.getHours())}:${pad(dateTimeObj.getMinutes())}`
);
return `${formattedDate} ${formattedTime}`;
};