---
title: "Datum"
type: "forum-thread"
url: "https://www.webforum.nu/amne/programmering/19398-datum"
topic: "Programmering"
topic_url: "https://www.webforum.nu/amne/programmering"
author: "Kent"
published: "2001-07-04T19:16:00.000Z"
updated: "2001-08-10T13:26:00.000Z"
replies: 10
views: 261
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/programmering/19398-datum"
---

# Datum

## #1 — Kent, 2001-07-04T19:16Z

Hur får man fram ett datum som ser ut så här: 2001-07-03

Permalänk: https://www.webforum.nu/p/19398

## #2 — Peter_B, 2001-07-04T23:41Z

få se, jag brukar göra såhär:

open (IN_DATE, "date +%Y-%m-%d &#0124;");
$date = \<IN_DATE\>;
close (IN_DATE);

jag vet att det går att skriva snyggare som 

$date  = ´date +%y-%m-%d´;

visserligen.. kolla in "man date" för hur du kan skapa fler format :)

Permalänk: https://www.webforum.nu/p/341989

## #3 — Jojoxx, 2001-07-05T10:52Z

Eller lite mer plattformsoberoende;

```
my @time=localtime(time);
$time[3]='0'.$time[3] if($time[3]<10);
$time[4]++; $time[4]='0'.$time[4] if($time[4]<10);
$time[5]+=1900;
$date = "$time[5]-$time[4]-$time[3]";
```

Permalänk: https://www.webforum.nu/p/341990

## #4 — Kent, 2001-07-05T12:30Z

Tack för de snabba svaren, 
verkar funka fint båda koderna :)

Permalänk: https://www.webforum.nu/p/341991

## #5 — Hansen, 2001-07-05T18:05Z

Jag brukar använda [Date::Format](http://search.cpan.org/doc/GBARR/TimeDate-1.10/lib/Date/Format.pm) som finns i [TimeDate](http://search.cpan.org/search?dist=TimeDate) den ger ungefär samma möjligheter som finns i \*nix date fast helt plattformsoberoende :)

Vill du inte förlita dig på en extern modul, kan du använda den här funktionen:

```
#!/usr/bin/perl -w

use strict;

sub FormatDate {

# FormatDate( <Mall>, <Språk>, <Tid> );
#
#  År
#    %yy    två sissta siffrorna.
#    %yyyy  alla fyra siffrorna.
#
#  Månad
#    %m     siffror utan inledande nolla.
#    %mm    siffror med inledande nolla.
#    %mmm   förkortning av månadens namn.
#    %mmmm  månadens namn.
#
#  Dag
#    %d     siffror utan inledande nolla.
#    %dd    siffror med inledande nolla.
#    %ddd   förkortning av dagens namn.
#    %dddd  dagens namn.
#
#  Timmar
#    %h     12-timmars format utan inledande nolla.
#    %hh    12-timmars format med inledande nolla.
#    %H     24-timmars format utan inledande nolla.
#    %HH    24-timmars format med inledande nolla.
#
#  Minuter
#    %M     utan inledande nolla.
#    %MM    med inledande nolla.
#
#  Sekunder
#    %S     utan inledande nolla.
#    %SS    med inledande nolla.
#
#
#  Exempel:
#
#    2001-01-01                 '%yyyy-%mm-%dd'
#    2001-01-01 12:00:00        '%yyyy-%mm-%dd %H:%M:%S'
#    Måndag den 1 Januari 2001  '%dddd den %d %mmmm %yyyy'
#    1 Januari 2001             '%d %mmmm %yyyy'

    my ( $template, $lang, $ctime ) = @_;

    my %language = (
      de => {
          days => [
              'Sonntag',    'Montag',  'Dienstag', 'Mittwoch',
              'Donnerstag', 'Freitag', 'Samstag'
          ],
          months => [
              'Januar',    'Februar', 'März',     'April',
              'Mai',       'Juni',    'Juli',     'August',
              'September', 'Oktober', 'November', 'Dezember'
          ],
      },
      en => {
          days => [
              'Sunday',   'Monday', 'Tuesday', 'Wednesday',
              'Thursday', 'Friday', 'Saturday'
          ],
          months => [
              'January',   'February', 'March',    'April',
              'May',       'June',     'July',     'August',
              'September', 'October',  'November', 'December'
          ],
      },
      sv => {
          days => [
              'Söndag', 'Måndag', 'Tisdag', 'Onsdag', 'Torsdag',
	      'Fredag', 'Lördag'
          ],
          months => [
              'Januari',   'Februari', 'Mars',     'April',
              'Maj',       'Juni',     'Juli',     'Augusti',
              'September', 'Oktober',  'November', 'December'
          ],
      },
    );

    $ctime &#0124;&#0124;= time();
    $template &#0124;&#0124;= '%yyyy-%mm-%dd';
    $lang = defined($lang) ? defined( $language{$lang} ) ? $lang : 'en' : 'en';

    my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) = localtime($ctime);

    my $newhour = ( $hour > 12 ) ? $hour - 12 : ( $hour == 0 ) ? 12 : $hour;

    my %date = (
      d    => $mday,
      dd   => ( $mday < 10 ) ? "0$mday" : $mday,
      ddd  => substr( @{ $language{$lang}{'days'} }[$wday], 0, 3 ),
      dddd => @{ $language{$lang}{'days'} }[$wday],
      m    => $mon + 1,
      mm   => ( ( $mon + 1 ) < 10 ) ? "0" . ( $mon + 1 ) : ( $mon + 1 ),
      mmm  => substr( @{ $language{$lang}{'months'} }[$mon], 0, 3 ),
      mmmm => @{ $language{$lang}{'months'} }[$mon],
      S    => $sec,
      SS   => ( $sec < 10 ) ? "0$sec" : $sec,
      M    => $min,
      MM   => ( $min < 10 ) ? "0$min" : $min,
      h    => $newhour,
      H    => $hour,
      hh   => ( $newhour < 10 ) ? "0$newhour" : $newhour,
      HH   => ( $hour < 10 ) ? "0$hour" : $hour,
      yy   => substr( 1900 + $year, 2, 2 ),
      yyyy => 1900 + $year,
      tt   => ( $hour > 12 ) ? "PM" : "AM",
    );

    $template =~ s/%([a-zA-Z]+)/{ defined( $date{$1} ) ? $date{$1} : "%$1" }/eg;

    return $template;
}

print
  FormatDate(), "\n",
  FormatDate( '%d %mmmm %yyyy' ), "\n",
  FormatDate( '%d %mmmm %yyyy', 'sv' ), "\n",
  FormatDate( '%dddd den %d %mmmm %yyyy', 'sv', 978346800 ), "\n";
```

Permalänk: https://www.webforum.nu/p/341992

## #6 — Hansen, 2001-07-05T19:09Z

Laddade upp script/funktion här: <http://freebox.com/c.h/perl/FormatDate.pl.txt>

Permalänk: https://www.webforum.nu/p/341993

## #7 — Jojoxx, 2001-07-06T05:35Z

Kanske *lite* mycket kod bara för att få ett datum i åååå-mm-dd format... :)

Permalänk: https://www.webforum.nu/p/341994

## #8 — Hansen, 2001-07-06T11:51Z

Det är sant men så klarar ju funktionen mer än bara åååå-mm-dd.

Ska man bara använda ett format på datumet tycker jag att din lösning fungerar utmärkt.

Vill man ha en flexibel datumfunktion i sitt kodbibliotek så tycker jag att min funktion fungerar bra.

Hoppas att någon får gjädje av min lilla kodsnutt :)

Permalänk: https://www.webforum.nu/p/341995

## #9 — orvar, 2001-08-07T19:28Z

har ingen som helst kunskap om cgi eller perl men jag behöver ett datum script i cgi så jag försökte mig på det här långa scriptet ändå. Men det blir lite fel. Jag bara kopierar över koden till en textfil och döper den till datum.cgi (provade med .pl först men då fick jag ett "sidan kan inte visas fel"). När jag kollar på filen i browsern får jag följande meddelande:

CGI Error
The specified CGI application misbehaved by not returning a complete set of HTTP headers. The headers it did return are:

2001-08-07
7 August 2001
7 Augusti 2001
Måndag den 1 Januari 2001

Vad ska jag göra för att få det rätt?

Permalänk: https://www.webforum.nu/p/341996

## #10 — KarlTomas, 2001-08-07T20:49Z

Är ganska novis på perl, men du kanske behöver skriva in:

> print "content-type: text/html\\n\\n";

Permalänk: https://www.webforum.nu/p/341997

## #11 — Hansen, 2001-08-10T13:26Z

om du ändrar print satsen till:

```
print
  "Content-Type: text/html\n\n",
  FormatDate(), "\n",
  FormatDate( '%d %mmmm %yyyy' ), "\n",
  FormatDate( '%d %mmmm %yyyy', 'sv' ), "\n",
  FormatDate( '%dddd den %d %mmmm %yyyy', 'sv', 978346800 ), "\n";
```

Så ska det nog lösa sig.

Permalänk: https://www.webforum.nu/p/341998

---

Tråden på webben: https://www.webforum.nu/amne/programmering/19398-datum
