Formatteer JavaScript-datum als YYYY-MM-DD

Ik heb een datum met het formaat Sun May 11,2014. Hoe kan ik het converteren naar 2014-05-11met JavaScript?

function taskDate(dateMilli) {
    var d = (new Date(dateMilli) + '').split(' ');
    d[2] = d[2] + ',';
    return [d[0], d[1], d[2], d[3]].join(' ');
}
var datemilli = Date.parse('Sun May 11,2014');
console.log(taskDate(datemilli));

Antwoord 1, Autoriteit 100%

u kunt doen:

function formatDate(date) {
    var d = new Date(date),
        month = '' + (d.getMonth() + 1),
        day = '' + d.getDate(),
        year = d.getFullYear();
    if (month.length < 2) 
        month = '0' + month;
    if (day.length < 2) 
        day = '0' + day;
    return [year, month, day].join('-');
}
console.log(formatDate('Sun May 11,2014'));

Antwoord 2, Autoriteit 102%

Gebruik gewoon de ingebouwde toISOString-methode die uw date naar het ISO 8601-formaat brengt:

const yourDate = new Date()
yourDate.toISOString().split('T')[0]

waar uw datumobject is.

Bewerken: @exbuddhaschreef dit om de tijdzone in de opmerkingen:

const offset = yourDate.getTimezoneOffset()
yourDate = new Date(yourDate.getTime() - (offset*60*1000))
return yourDate.toISOString().split('T')[0]

Antwoord 3, autoriteit 31%

Ik gebruik deze manier om de datum in het formaat jjjj-mm-dd te krijgen 🙂

var todayDate = new Date().toISOString().slice(0, 10);
console.log(todayDate);

Antwoord 4, autoriteit 21%

De eenvoudigste manier om uw datum om te zetten naar het jjjj-mm-dd-formaat, is om dit te doen:

var date = new Date("Sun May 11,2014");
var dateString = new Date(date.getTime() - (date.getTimezoneOffset() * 60000 ))
                    .toISOString()
                    .split("T")[0];

Hoe het werkt:

  • new Date("Sun May 11,2014")converteert de string "Sun May 11,2014"naar een datumobject dat de tijd Sun May 11 2014 00:00:00in een tijdzone gebaseerd op de huidige locale (hostsysteeminstellingen)
  • new Date(date.getTime() - (date.getTimezoneOffset() * 60000 ))converteert je datum naar een datumobject dat overeenkomt met de tijd Sun May 11 2014 00:00:00in UTC (standaardtijd) door de tijdzone-offset af te trekken
  • .toISOString()converteert het datumobject naar een ISO 8601-tekenreeks 2014-05-11T00:00:00.000Z
  • .split("T")splitst de string op in array ["2014-05-11", "00:00:00.000Z"]
  • [0]neemt het eerste element van die array

Demo

var date = new Date("Sun May 11,2014");
var dateString = new Date(date.getTime() - (date.getTimezoneOffset() * 60000 ))
                    .toISOString()
                    .split("T")[0];
console.log(dateString);

Antwoord 5, autoriteit 19%

2020 ANTWOORD

U kunt de native functie .toLocaleDateString()gebruiken die verschillende nuttige parameters ondersteunt, zoals locale(om een indeling te selecteren zoals MM/DD/YYYY of YYYY/MM/ DD), tijdzone(om de datum om te zetten) en opties voor opmaakdetails(bijvoorbeeld: 1 vs 01 vs januari).

Voorbeelden

new Date().toLocaleDateString() // 8/19/2020
new Date().toLocaleDateString('en-US', {year: 'numeric', month: '2-digit', day: '2-digit'}); // 08/19/2020 (month and day with two digits)
new Date().toLocaleDateString('en-ZA'); // 2020/08/19 (year/month/day) notice the different locale
new Date().toLocaleDateString('en-CA'); // 2020-08-19 (year-month-day) notice the different locale
new Date().toLocaleString("en-US", {timeZone: "America/New_York"}); // 8/19/2020, 9:29:51 AM. (date and time in a specific timezone)
new Date().toLocaleString("en-US", {hour: '2-digit', hour12: false, timeZone: "America/New_York"});  // 09 (just the hour)

Merk op dat om een datum in uw specifieke gewenste formaat uit te voeren, u soms een compatibele landinstelling met dat formaat moet vinden.
U kunt de lokale voorbeelden hier vinden: https://www.w3schools.com/jsref /tryit.asp?filename=tryjsref_tolocalestring_date_all

Houd er rekening mee dat localegewoon het formaat wijzigt. Als u een specifieke datum wilt omzetten in een specifiek land of stad, moet u de parameter timezonegebruiken .


Antwoord 6, autoriteit 7%

Een combinatie van enkele van de antwoorden:

var d = new Date(date);
date = [
  d.getFullYear(),
  ('0' + (d.getMonth() + 1)).slice(-2),
  ('0' + d.getDate()).slice(-2)
].join('-');

Antwoord 7, autoriteit 6%

format = function date2str(x, y) {
    var z = {
        M: x.getMonth() + 1,
        d: x.getDate(),
        h: x.getHours(),
        m: x.getMinutes(),
        s: x.getSeconds()
    };
    y = y.replace(/(M+|d+|h+|m+|s+)/g, function(v) {
        return ((v.length > 1 ? "0" : "") + z[v.slice(-1)]).slice(-2)
    });
    return y.replace(/(y+)/g, function(v) {
        return x.getFullYear().toString().slice(-v.length)
    });
}

Resultaat:

format(new Date('Sun May 11,2014'), 'yyyy-MM-dd')
"2014-05-11

Antwoord 8, autoriteit 5%

Als je niets tegen het gebruik van bibliotheken hebt, kun je de bibliotheek Moments.jsals volgt gebruiken:

var now = new Date();
var dateString = moment(now).format('YYYY-MM-DD');
var dateStringWithTime = moment(now).format('YYYY-MM-DD HH:mm:ss');
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

Antwoord 9, autoriteit 3%

U kunt toLocaleDateString('fr-CA')gebruiken op Dateobject

console.log(new Date('Sun May 11,2014').toLocaleDateString('fr-CA'));

Antwoord 10, autoriteit 2%

Gebruik gewoon dit:

var date = new Date('1970-01-01'); // Or your date here
console.log((date.getMonth() + 1) + '/' + date.getDate() + '/' +  date.getFullYear());

Eenvoudig en lief 😉


Antwoord 11, autoriteit 2%

Kortste

.toJSON().slice(0,10);

Antwoord 12, autoriteit 2%

Haal jaar, maand en dag op en voeg ze samen. Recht, eenvoudig en nauwkeurig.

function formatDate(date) {
    var year = date.getFullYear().toString();
    var month = (date.getMonth() + 101).toString().substring(1);
    var day = (date.getDate() + 100).toString().substring(1);
    return year + "-" + month + "-" + day;
}
//Usage example:
alert(formatDate(new Date()));

Antwoord 13, autoriteit 2%

toISOString()gaat ervan uit dat uw datum de lokale tijd is en converteert deze naar UTC. U krijgt een onjuiste datumreeks.

De volgende methode zou moeten opleveren wat je nodig hebt.

Date.prototype.yyyymmdd = function() {         
    var yyyy = this.getFullYear().toString();                                    
    var mm = (this.getMonth()+1).toString(); // getMonth() is zero-based         
    var dd  = this.getDate().toString();             
    return yyyy + '-' + (mm[1]?mm:"0"+mm[0]) + '-' + (dd[1]?dd:"0"+dd[0]);
};

Bron: https://blog.justin.kelly.org.au/simple-javascript-function-to-format-the-date-as-yyyy-mm-dd/


Antwoord 14

Om ook rekening te houden met de tijdzone, zou deze oneliner goed moeten zijn zonder enige bibliotheek:

new Date().toLocaleString("en-IN", {timeZone: "Asia/Kolkata"}).split(',')[0]

Antwoord 15

Je kunt dit proberen: https://www.npmjs.com/package/timesolver

npm i timesolver

Gebruik het in je code:

const timeSolver = require('timeSolver');
const date = new Date();
const dateString = timeSolver.getString(date, "YYYY-MM-DD");

Je kunt de datumstring verkrijgen door deze methode te gebruiken:

getString

Antwoord 16

Ik raad aan om iets als formatDate-jste gebruiken in plaats van het elke keer te proberen te repliceren. Gebruik gewoon een bibliotheek die alle belangrijke strftime-acties ondersteunt.

new Date().format("%Y-%m-%d")

Antwoord 17

Als ES2018 rond rolt (werkt in chrome), kun je het gewoon regexen

(new Date())
    .toISOString()
    .replace(
        /^(?<year>\d+)-(?<month>\d+)-(?<day>\d+)T.*$/,
        '$<year>-$<month>-$<day>'
    )

2020-07-14

Of als je iets heel veelzijdigs wilt met geen enkele bibliotheek

(new Date())
    .toISOString()
    .match(
        /^(?<yyyy>\d\d(?<yy>\d\d))-(?<mm>0?(?<m>\d+))-(?<dd>0?(?<d>\d+))T(?<HH>0?(?<H>\d+)):(?<MM>0?(?<M>\d+)):(?<SSS>(?<SS>0?(?<S>\d+))\.\d+)(?<timezone>[A-Z][\dA-Z.-:]*)$/
    )
    .groups

Wat resulteert in het extraheren van het volgende

{
    H: "8"
    HH: "08"
    M: "45"
    MM: "45"
    S: "42"
    SS: "42"
    SSS: "42.855"
    d: "14"
    dd: "14"
    m: "7"
    mm: "07"
    timezone: "Z"
    yy: "20"
    yyyy: "2020"
}

Die je zo kunt gebruiken met replace(..., '$<d>/$<m>/\'$<yy> @ $<H>:$<MM>')zoals bovenaan in plaats van .match(...).groupsom

te krijgen

14/7/'20 @ 8:45

Antwoord 18

const formatDate = d => [
    d.getFullYear(),
    (d.getMonth() + 1).toString().padStart(2, '0'),
    d.getDate().toString().padStart(2, '0')
].join('-');

Je kunt padstart gebruiken.

padStart(n, ‘0’) zorgt ervoor dat er minimaal n tekens in een tekenreeks staan en zet er ‘0’ voor totdat die lengte is bereikt.

join(‘-‘) voegt een array samen en voegt een ‘-‘-symbool toe tussen alle elementen.

getMonth() begint bij 0 vandaar de +1.


Antwoord 19

Geen van deze antwoorden bevredigde me helemaal. Ik wilde een platformonafhankelijke oplossing die me de dag in de lokale tijdzone gaf zonder externe bibliotheken te gebruiken.

Dit is wat ik bedacht:

function localDay(time) {
  var minutesOffset = time.getTimezoneOffset()
  var millisecondsOffset = minutesOffset*60*1000
  var local = new Date(time - millisecondsOffset)
  return local.toISOString().substr(0, 10)
}

Dat zou de dag van de datum moeten retourneren, in de notatie JJJJ-MM-DD, in de tijdzone waarnaar de datum verwijst.

Dus bijvoorbeeld, localDay(new Date("2017-08-24T03:29:22.099Z"))zal "2017-08-23"zelfs teruggeven hoewel het al de 24e is in UTC.

U moet polyfill DATE.PROTOTYPE.OSOSTRING VOOR HET TE WERKEN IN INTERNET & NBSP; Explorer & NBSP; 8, maar het moet overal anders worden ondersteund.


Antwoord 20

new Date().toLocaleDateString('pt-br').split( '/' ).reverse( ).join( '-' );

of

new Date().toISOString().split('T')[0]
new Date('23/03/2020'.split('/').reverse().join('-')).toISOString()
new Date('23/03/2020'.split('/').reverse().join('-')).toISOString().split('T')[0]

Probeer dit!


Antwoord 21

Hier is een manier om het te doen:

var date = Date.parse('Sun May 11,2014');
function format(date) {
  date = new Date(date);
  var day = ('0' + date.getDate()).slice(-2);
  var month = ('0' + (date.getMonth() + 1)).slice(-2);
  var year = date.getFullYear();
  return year + '-' + month + '-' + day;
}
console.log(format(date));

Antwoord 22

Datum.js is hier geweldig voor.

require("datejs")
(new Date()).toString("yyyy-MM-dd")

Antwoord 23

Als u momentjsgebruikt, bevatten ze nu a Constant voor dat formaat YYYY-MM-DD:

date.format(moment.HTML5_FMT.DATE)

Antwoord 24

Helaas, JavaScript’s Dateobjectheeft veel valkuilen. Elke oplossing gebaseerd op Date‘s ingebouwde toISOStringmoet knoeien met de tijdzone, zoals besproken in sommige andere antwoorden op deze vraag. De schone oplossing om een ISO-8601-datum (zonder tijd) weer te geven, wordt gegeven door Temporal.PlainDatevan het Temporalvoorstel. Vanaf februari 2021 moet u de tijdelijke oplossing kiezen die het beste bij u past.

gebruik Datemet aaneenschakeling van vanilletekenreeksen

Ervan uitgaande dat uw interne weergave is gebaseerd op Date, kunt u handmatige tekenreeksaaneenschakeling uitvoeren. De volgende code vermijdt enkele van de valkuilen van Date(tijdzone, op nul gebaseerde maand, ontbrekende 2-cijferige opmaak), maar er kunnen andere problemen zijn.

function vanillaToDateOnlyIso8601() {
  // month May has zero-based index 4
  const date = new Date(2014, 4, 11);
  const yyyy = date.getFullYear();
  const mm = String(date.getMonth() + 1).padStart(2, "0"); // month is zero-based
  const dd = String(date.getDate()).padStart(2, "0");
  if (yyyy < 1583) {
    // TODO: decide how to support dates before 1583
    throw new Error(`dates before year 1583 are not supported`);
  }
  const formatted = `${yyyy}-${mm}-${dd}`;
  console.log("vanilla", formatted);
}

gebruik Datemet helperbibliotheek (bijv. formatISOvan date-fns)

Dit is een populaire aanpak, maar je bent nog steeds gedwongen om een kalenderdatum te behandelen als een Date, wat staat voor

een enkel moment in een platformonafhankelijke indeling

De volgende code zou de klus echter moeten klaren:

import { formatISO } from "date-fns";
function dateFnsToDateOnlyIso8601() {
  // month May has zero-based index 4
  const date = new Date(2014, 4, 11);
  const formatted = formatISO(date, { representation: "date" });
  console.log("date-fns", formatted);
}

zoek een bibliotheek die datums en tijden correct weergeeft

Ik wou dat er een schone en beproefde bibliotheek was met zijn eigen goed ontworpen datum-tijd-representaties. Een veelbelovende kandidaat voor de taak in deze vraag was LocalDatevan @js-joda/core, maar de bibliotheek is minder actief dan bijvoorbeeld date-fns. Bij het spelen met een voorbeeldcode had ik ook wat problemen na het toevoegen van de optionele @js-joda/timezone.

De kernfunctionaliteit werkt echter en ziet er voor mij erg schoon uit:

import { LocalDate, Month } from "@js-joda/core";
function jodaDateOnlyIso8601() {
  const someDay = LocalDate.of(2014, Month.MAY, 11);
  const formatted = someDay.toString();
  console.log("joda", formatted);
}

Experimenteer met de Temporal-proposal polyfill

Dit wordt niet aanbevolen voor de productie, maar u kunt de toekomst importeren als u dat wenst:

import { Temporal } from "proposal-temporal";
function temporalDateOnlyIso8601() {
  // yep, month is one-based here (as of Feb 2021)
  const plainDate = new Temporal.PlainDate(2014, 5, 11);
  const formatted = plainDate.toString();
  console.log("proposal-temporal", formatted);
}

Antwoord 25

Een paar van het vorige antwoord waren OK, maar ze waren niet erg flexibel. Ik wilde iets dat echt meer randgevallen zou kunnen hanteren, dus ik nam @orangleliu’s antwoord en breidde het uit. https://jsfiddle.net/8904cmld/1/

function DateToString(inDate, formatString) {
    // Written by m1m1k 2018-04-05
    // Validate that we're working with a date
    if(!isValidDate(inDate))
    {
        inDate = new Date(inDate);
    }
    // See the jsFiddle for extra code to be able to use DateToString('Sun May 11,2014', 'USA');
    //formatString = CountryCodeToDateFormat(formatString);
    var dateObject = {
        M: inDate.getMonth() + 1,
        d: inDate.getDate(),
        D: inDate.getDate(),
        h: inDate.getHours(),
        m: inDate.getMinutes(),
        s: inDate.getSeconds(),
        y: inDate.getFullYear(),
        Y: inDate.getFullYear()
    };
    // Build Regex Dynamically based on the list above.
    // It should end up with something like this: "/([Yy]+|M+|[Dd]+|h+|m+|s+)/g"
    var dateMatchRegex = joinObj(dateObject, "+|") + "+";
    var regEx = new RegExp(dateMatchRegex,"g");
    formatString = formatString.replace(regEx, function(formatToken) {
        var datePartValue = dateObject[formatToken.slice(-1)];
        var tokenLength = formatToken.length;
        // A conflict exists between specifying 'd' for no zero pad -> expand
        // to '10' and specifying yy for just two year digits '01' instead
        // of '2001'.  One expands, the other contracts.
        //
        // So Constrict Years but Expand All Else
        if (formatToken.indexOf('y') < 0 && formatToken.indexOf('Y') < 0)
        {
            // Expand single digit format token 'd' to
            // multi digit value '10' when needed
            var tokenLength = Math.max(formatToken.length, datePartValue.toString().length);
        }
        var zeroPad = (datePartValue.toString().length < formatToken.length ? "0".repeat(tokenLength) : "");
        return (zeroPad + datePartValue).slice(-tokenLength);
    });
    return formatString;
}

Voorbeeld Gebruik:

DateToString('Sun May 11,2014', 'MM/DD/yy');
DateToString('Sun May 11,2014', 'yyyy.MM.dd');
DateToString(new Date('Sun Dec 11,2014'),'yy-M-d');

Antwoord 26

Het opnieuw formatteren van een datumstring is redelijk eenvoudig, b.v.

var s = 'Sun May 11,2014';
function reformatDate(s) {
  function z(n){return ('0' + n).slice(-2)}
  var months = [,'jan','feb','mar','apr','may','jun',
                 'jul','aug','sep','oct','nov','dec'];
  var b = s.split(/\W+/);
  return b[3] + '-' +
    z(months.indexOf(b[1].substr(0,3).toLowerCase())) + '-' +
    z(b[2]);
}
console.log(reformatDate(s));

Antwoord 27

function myYmd(D){
    var pad = function(num) {
        var s = '0' + num;
        return s.substr(s.length - 2);
    }
    var Result = D.getFullYear() + '-' + pad((D.getMonth() + 1)) + '-' + pad(D.getDate());
    return Result;
}
var datemilli = new Date('Sun May 11,2014');
document.write(myYmd(datemilli));

Antwoord 28

Nog een andere combinatie van de antwoorden. Goed leesbaar, maar een beetje langdradig.

function getCurrentDayTimestamp() {
  const d = new Date();
  return new Date(
    Date.UTC(
      d.getFullYear(),
      d.getMonth(),
      d.getDate(),
      d.getHours(),
      d.getMinutes(),
      d.getSeconds()
    )
  // `toIsoString` returns something like "2017-08-22T08:32:32.847Z"
  // and we want the first part ("2017-08-22")
  ).toISOString().slice(0, 10);
}

Antwoord 29

var d = new Date("Sun May 1,2014");
var year  = d.getFullYear();
var month = d.getMonth() + 1;
var day   = d.getDate(); 
month = checkZero(month);             
day   = checkZero(day);
var date = "";
date += year;
date += "-";
date += month;
date += "-";
date += day;
document.querySelector("#display").innerHTML = date;
function checkZero(i) 
{
    if (i < 10) 
    {
        i = "0" + i
    };  // add zero in front of numbers < 10
    return i;
}
<div id="display"></div>

ANTWOORD 30

new Date(new Date(YOUR_DATE.toISOString()).getTime() - 
                 (YOUR_DATE.getTimezoneOffset() * 60 * 1000)).toISOString().substr(0, 10)

Other episodes