Toon posts:

[JS] ISO date format naar Date object

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een string die een datestamp in ISO format bevat, dus volgens:
\d{8}(T\d{6}Z?)?

(geen milliseconden dus)

nu wil ik dat in een JS date object hebben, maar die parser herkent 't niet. Wat ik nu heb is het volgende:
JavaScript:
1
new Date(isoDate.replace(/(\d{4})(\d{2})(\d{2})(T(\d{2})(\d{2})(\d{2})Z?)?/,'$1/$2/$3 $5:$6:$7'));


dit werkt dus ten dele:
code:
1
2
3
4
5
6
7
8
9
input:   20060523T103500
replace: 2006/05/23 10:35:00
date:    Tue May 23 2006 10:35:00 GMT+0200

en

input:   20060519
replace: 2006/05/19 ::
date:    Fri May 19 2006 00:00:00 GMT+0200

bij de tweede is de tussenstap wat lelijkjes, maar de Date constructor lost dat op
alleen:
code:
1
2
3
input:   20060424T193147Z
replace: 2006/04/24 19:31:47
date:    Mon Apr 24 2006 19:31:47 GMT+0200

dat gaat uiteraard niet goed. Nnote de "Z" die aangeeft dat ie in GMT tijd is. Iemand enig idee hoe ik dat kan oplossen?

[ Voor 4% gewijzigd door Verwijderd op 25-04-2006 15:40 ]


  • André
  • Registratie: Maart 2002
  • Laatst online: 17:02

André

Analytics dude

Het gaat er dus om dat die Z aangeeft dat het GMT+0000 ipv GMT+0200?

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 16:00

crisp

Devver

Pixelated

Persoonlijk zou ik dan eerder zoiets doen in plaats van krampachtig te proberen het in een one-liner te stoppen:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function parseIsoDate(date)
{
    var match = date.match(/^(\d{4})(\d{2})(\d{2})(T(\d{2})(\d{2})(\d{2})(Z?))?$/);
    if (match)
    {
        var newdate = match[1] + '/' + match[2] + '/' + match[3];
        if (match[4])
        {
            newdate += ' ' + match[5] + ':' + match[6] + ':' + match[7];
            if (match[8])
            {
                newdate += ' GMT';
            }
        }

        return new Date(newdate);
    }
    else
    {
        return false;
    }
}

;)

Intentionally left blank