web-dev-qa-db-fra.com

Formater la date JavaScript en aaaa-mm-jj

Bonjour à tous j'ai un format de date dim mai 11,2014 comment puis-je le convertir en 2014-05-11 en 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');
taskdate(datemilli);

le code ci-dessus me donne le même format de date dim 11 mai 2014 aider s'il vous plaît

190
user3625547

tu peux faire

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('-');
}

exemple d'utilisation:

alert(formatDate('Sun May 11,2014'));

Sortie:

2014-05-11

Démo sur le violon: http://jsfiddle.net/abdulrauf6182012/2Frm3/

293
user3470953

Tirez simplement parti de la méthode toISOString intégrée qui amène votre date au format ISO 8601.

yourDate.toISOString().split('T')[0]

où yourDate est votre objet de date.

236
Darth Egregious

J'utilise cette méthode pour obtenir la date au format aaaa-mm-jj :)

var todayDate = new Date().toISOString().slice(0,10);
70
Fernando Aguilar

Le moyen le plus simple de convertir votre date au format aaaa-mm-jj est de procéder ainsi:

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

Comment ça marche :

  • new Date("Sun May 11,2014") convertit la chaîne "Sun May 11,2014" en un objet de date représentant l'heure Sun May 11 2014 00:00:00 dans un fuseau horaire basé sur les paramètres régionaux en vigueur (paramètres du système hôte)
  • new Date(date.getTime() - (date.getTimezoneOffset() * 60000 )) convertit votre date en un objet de date qui correspond à l'heure Sun May 11 2014 00:00:00 en UTC (heure standard) en soustrayant le décalage de fuseau horaire
  • .toISOString() convertit l'objet de date en chaîne ISO 8601 2014-05-11T00:00:00.000Z
  • .split("T") divise la chaîne en tableau ["2014-05-11", "00:00:00.000Z"]
  • [0] prend le premier élément de ce tableau

Démo

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

console.log(dateString);

40
John Slegers
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" : "") + eval('z.' + v.slice(-1))).slice(-2)
    });

    return y.replace(/(y+)/g, function(v) {
        return x.getFullYear().toString().slice(-v.length)
    });
}

résultat:

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

Une combinaison de certaines des réponses:

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

toISOString() suppose que votre date est l'heure locale et le convertit au format UTC. Vous obtiendrez une chaîne de date incorrecte.

La méthode suivante devrait vous retourner ce dont vous avez besoin.

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]);
};

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

6
user1920925

vous pouvez essayer ceci: https://www.npmjs.com/package/timesolver

npm i timesolver

utilisez-le dans votre code:

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

Vous pouvez obtenir une chaîne de date en utilisant cette méthode:

getString

J'espère que ceci vous aidera!

4
sean1093

Si vous n'avez rien contre l'utilisation des bibliothèques; vous pouvez simplement utiliser la bibliothèque moments.js comme ...

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>

4
Nifemi Sola-Ojo

Pourquoi ne pas simplement utiliser cette

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

Simple et doux;)

4
Pardeep Jain

Aucune de ces réponses ne m'a complètement satisfait. Je voulais une solution multiplateforme qui me laisse passer la journée dans le fuseau horaire local sans utiliser de bibliothèques externes.

Voici ce que je suis venu avec:

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

Cela devrait renvoyer le jour de la date, au format AAAA-MM-JJ, dans le fuseau horaire les références de date.

Ainsi, par exemple, localDay(new Date("2017-08-24T03:29:22.099Z")) renverra "2017-08-23" même s'il est déjà le 24ème à l'heure UTC.

Vous aurez besoin de polyfill Date.prototype.toISOString pour que cela fonctionne dans IE8, mais il devrait être pris en charge partout ailleurs.

3
Erik Pukinskis

Je suggère d'utiliser quelque chose comme ceci https://github.com/brightbits/formatDate-js au lieu d'essayer de le répliquer à chaque fois, utilisez simplement une bibliothèque prenant en charge toutes les actions principales de strftime. 

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

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>

1
antelove

Format de date compatible avec PHP

Voici une petite fonction qui peut prendre les mêmes paramètres que la fonction PHP et date() et renvoyer une chaîne de date/heure en javascript.

Notez que toutes les options de format de date () de PHP ne sont pas prises en charge. Vous pouvez étendre l'objet parts pour créer le jeton de format manquant

/** 
 * Date formatter with PHP "date()"-compatible format syntax.
 */
const formatDate = (format, date) => {
  if (!format) { format = 'Y-m-d' }
  if (!date) { date = new Date() }

  const parts = {
    Y: date.getFullYear().toString(),
    y: ('00' + (date.getYear() - 100)).toString().slice(-2),
    m: ('0' + (date.getMonth() + 1)).toString().slice(-2),
    n: (date.getMonth() + 1).toString(),
    d: ('0' + date.getDate()).toString().slice(-2),
    j: date.getDate().toString(),
    H: ('0' + date.getHours()).toString().slice(-2),
    G: date.getHours().toString(),
    i: ('0' + date.getMinutes()).toString().slice(-2),
    s: ('0' + date.getSeconds()).toString().slice(-2)
  }

  const modifiers = Object.keys(parts).join('')
  const reDate = new RegExp('(?<!\\\\)[' + modifiers + ']', 'g')
  const reEscape = new RegExp('\\\\([' + modifiers + '])', 'g')

  return format
    .replace(reDate, $0 => parts[$0])
    .replace(reEscape, ($0, $1) => $1)
}

// ----- EXAMPLES -----
console.log( formatDate() ); // "2019-05-21"
console.log( formatDate('H:i:s') ); // "16:21:32"
console.log( formatDate('Y-m-d, o\\n H:i:s') ); // "2019-05-21, on 16:21:32"
console.log( formatDate('Y-m-d', new Date(2000000000000)) ); // "2033-05-18"
1
Philipp

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;
}

alert(formatDate(new Date()));

1
Luo Jiong Hui

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));

1
Andrei

Cela a fonctionné pour moi pour obtenir la date actuelle au format souhaité (AAAAMMJJ HH: MM: SS 

var d = new Date();
var date1=d.getFullYear()+''+((d.getMonth()+1)<10?"0"+(d.getMonth()+1):(d.getMonth()+1))+''+(d.getDate()<10?"0"+d.getDate():d.getDate());
var time1=(d.getHours()<10?"0"+d.getHours():d.getHours())+':'+(d.getMinutes()<10?"0"+d.getMinutes():d.getMinutes())+':'+(d.getSeconds()<10?"0"+d.getSeconds():d.getSeconds());
print(date1+' '+time1);
1
SaP

Date.js est idéal pour cela.

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

Le reformatage d'une chaîne de date est assez simple, par exemple.

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));

1
RobG

Format et recherche des dates max et min à partir des données hashmap

var obj = {"a":'2001-15-01', "b": '2001-12-02' , "c": '2001-1-03'};

function findMaxMinDate(obj){
  let formatEncode = (id)=> { let s = id.split('-'); return `${s[0]+'-'+s[2]+'-'+s[1]}`}
  let formatDecode = (id)=> { let s = id.split('/'); return `${s[2]+'-'+s[0]+'-'+s[1]}`}
  let arr = Object.keys( obj ).map(( key )=> { return new Date(formatEncode(obj[key])); });
  let min = new Date(Math.min.apply( null, arr )).toLocaleDateString();
  let max = new Date(Math.max.apply( null, arr )).toLocaleDateString();
  return {maxd: `${formatDecode(max)}`, mind:`${formatDecode(min)}`}
}

console.log(findMaxMinDate(obj));
0
KARTHIKEYAN.A

Quelques-uns de ceux ci-dessus étaient ok - mais n'étaient pas très flexibles. Je voulais quelque chose qui puisse vraiment gérer plus d’affaires Edge, alors j’ai pris la réponse de @orangleliu et l’a développée. 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.
  // 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;
}

Exemple d'utilisation:

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');
0
m1m1k

Encore une autre combinaison de réponses. Bien lisible, mais un peu long.

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);
}
0
kadrian

J'ai modifié la réponse de Samit Satpute comme suit:

var newstartDate = new Date();
// newstartDate.setDate(newstartDate.getDate() - 1);
var startDate = newstartDate.toISOString().replace(/[-T:\.Z]/g, ""); //.slice(0, 10); // To get the Yesterday's Date in YYYY MM DD Format
console.log(startDate);

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

Facilement accompli par mon date-shortcode package:

const dateShortcode = require('date-shortcode')
dateShortcode.parse('{YYYY-MM-DD}', 'Sun May 11,2014')
//=> '2014-05-11'
0
Kodie Grantham

Aucune bibliothèque n'est nécessaire

Juste javascript pur

L'exemple ci-dessous obtient les deux derniers mois à compter d'aujourd'hui

var d = new Date()
d.setMonth(d.getMonth() - 2);
var dateString = new Date(d);
console.log('Before Format', dateString, 'After format', dateString.toISOString().slice(0,10))
0

Voici une façon de le faire:

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));
0
Gergo Erdosi

Si la date doit être la même dans tous les fuseaux horaires, par exemple, représente une valeur de la base de données, veillez à utiliser les versions utc des fonctions day, month et fullear sur l'objet date js car elles s'afficheront en heure utc et éviteront 1 erreur dans certains fuseaux horaires. Encore mieux utiliser la bibliothèque de dates moment.js pour ce type de formatage

0
GameSalutes