Home > Blockchain >  Convert a string to date in JavaScript
Convert a string to date in JavaScript

Time:07-04

I have the following string and I want to convert it to Date

'20220722T141444Z'

In C# I converted it by telerik's DateParser library.

Is there a way to convert it in JavaScript as well?

CodePudding user response:

There are many questions on parsing timestamps. In this case, you can just get the parts as two digit pairs then use that to call the Date constructor.

Since the timestamp has a trailing "Z", likely it should be parsed as UTC so:

let ts = '20220722T141444Z'
let [C,Y,M,D,H,m,s] = ts.match(/\d\d/g) || [];
let date = new Date(Date.UTC(C Y, M-1, D, H, m, s));

console.log(date.toISOString());

There are many other ways to approach the problem, such as modifying the values to create a supported format such as `2022-07-22T14:14:44Z', however it's more efficient to give the parts directly to the Date constructor than to build a string then have the built–in parser parse it.

CodePudding user response:

there is a way in javascript but i think it wont work with this format

change the format like this and try

new Date('20220722T141444Z')
Invalid Date
new Date('20220722')
Invalid Date
new Date('2022 07 22')
Fri Jul 22 2022 00:00:00 GMT 0530 (India Standard Time)

CodePudding user response:

The moment.js library will convert this format by default by just calling the below. This will however involve the addition of the new library into your project.

moment('20220722T141444Z') // "Fri Jul 22 2022 15:14:44 GMT 0100"

To use vanilla JS only, you'd have to parse the date yourself as mentioned in several other answers.

CodePudding user response:

Because new Date(string) returns an Invalid Date I'd do it like that and use String.prototype.slice():

function date(a) {
    return `${a.slice(6, 8)}.${a.slice(4, 6)}.${a.slice(0, 4)}`;
}

console.log(date("20220722T141444Z"));
// output: 22.07.2022

CodePudding user response:

You could convert the input string to an ISO date, this can then be parsed by the Date constructor.

This should work if the input has a UTC offset other than 'Z', for example ' 05:30'.

let input = '20220722T141444Z';

function toIso(input) { 
    return [...input].reduce((s, chr, idx) => s   ([4,6,11,13].includes(idx) ? (idx < 11) ? '-': ':': '')   chr , '');
}

console.log('Input (ISO):', toIso(input))
console.log('Date.toISOString():', new Date(toIso(input)).toISOString())
.as-console-wrapper { max-height: 100% !important; }

  • Related