web-dev-qa-db-fra.com

Comment convertir une date complète en une date courte en javascript?

J'ai une date comme celle-ci lundi 9 janvier 2010

Je veux maintenant le convertir en

1/9/2010 mm/jj/aaaa

J'ai essayé de faire ça

    var startDate = "Monday, January 9, 2010";
    var convertedStartDate = new Date(startDate);
    var month = convertedStartDate.getMonth() + 1
    var day = convertedStartDate.getDay();
    var year = convertedStartDate.getFullYear();
    var shortStartDate = month + "/" + day + "/" + year;

Cependant, il faut penser que la date est dans un format différent puisque le jour renvoie 1 au lieu de 9.

40
chobo2

La méthode getDay() renvoie un nombre pour indiquer le jour de la semaine (0 = dim, 1 = lun, ... 6 = sam). Utilisez getDate() pour renvoyer un nombre pour le jour du mois:

var day = convertedStartDate.getDate();

Si vous le souhaitez, vous pouvez essayer d'ajouter une fonction de format personnalisé au prototype de l'objet Date:

Date.prototype.formatMMDDYYYY = function(){
    return (this.getMonth() + 1) + 
    "/" +  this.getDate() +
    "/" +  this.getFullYear();
}

Après cela, vous pouvez appeler formatMMDDYYY() sur toute instance de l'objet Date. Bien sûr, ce n'est qu'un exemple très spécifique, et si vous en avez vraiment besoin, vous pouvez écrire une fonction de formatage générique qui le ferait sur la base d'une chaîne de formatage, un peu comme SimpleDateeFormat de Java ( http: // Java. Sun.com/j2se/1.4.2/docs/api/Java/text/SimpleDateFormat.html )

(tangente: l'objet Date me confond toujours ... getYear() vs getFullYear(), getDate() vs getDay(), getDate() s'étend de 1..31, mais getMonth() de 0..11

C'est un gâchis et j'ai toujours besoin de jeter un coup d'œil. http://www.w3schools.com/jsref/jsref_obj_date.asp )

48
Roland Bouman

Voici:

(new Date()).toLocaleDateString('en-US');

C'est ça !!

vous pouvez l'utiliser sur n'importe quel objet date

disons que vous avez un objet appelé "currentDate"

var currentDate = new Date(); //use your date here
currentDate.toLocaleDateString('en-US'); // "en-US" gives date in US Format - mm/dd/yy

(ou)

Si vous le souhaitez au format local,

currentDate.toLocaleDateString(); // gives date in local Format
24
gnath
var d = new Date("Wed Mar 25 2015 05:30:00 GMT+0530 (India Standard Time)"); 
document.getElementById("demo").innerHTML = d.toLocaleDateString();
5
Abilash Raghu

Ceci est un excellent endroit pour utiliser Moment.js

JavaScript est connu pour mal gérer les dates. Il y a quelques pièges auxquels vous serez susceptible si vous ajoutez simplement une date ensemble comme ceci:

var startDate = "Monday, January 9, 2010";
var convertedStartDate = new Date(startDate);
var month = convertedStartDate.getMonth() + 1
var day = convertedStartDate.getDay();
var year = convertedStartDate.getFullYear();
var shortStartDate = month + "/" + day + "/" + year;
  • JavaScript ajoute implicitement un décalage DateTime qui pourrait pousser la date dans le lendemain si votre utilisateur se trouve du côté opposé de la ligne Date internationale.
    • c'est-à-dire que le client a +/- 12 heures ou plus
  • JavaScript ne vous donnera pas 10 caractères complets pour le cas ajouté.
    • c'est-à-dire que votre service peut s'attendre à "Date courte" 01/01/2015 "" mais si vous ajoutez simplement comme dans le cas ci-dessus, vous vous retrouverez avec "1/1/2015"

Vous devez utiliser Moment.js pour gérer ce cas. Il existe des tonnes de formats intégrés pour les dates et vous pouvez les spécifier manuellement sans risque d'ajout de décalage date-heure ou de format différent de celui que vous attendez.

Par exemple: moment('01/01/2001').format('L'); résultera en '01/01/2001 '

Jetez un oeil à ce sandbox moment.js sur jsfiddle

1
dkaramazov

date.toLocaleDateString('en-US') fonctionne très bien. Voici quelques informations supplémentaires à ce sujet: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString

1
TrevorBrooks

Vous pouvez le faire assez facilement avec mon package date-shortcode :

const dateShortcode = require('date-shortcode')

var startDate = 'Monday, January 9, 2010'
dateShortcode.parse('{M/D/YYYY}', startDate)
//=> '1/9/2010'
0
Kodie Grantham

Un peu tard pour la fête, toLocaleDateString() supprimera les premiers 0 du jour et du mois, nous obtiendrons donc quelque chose comme "1/9/1970", ce qui n'est pas parfait à mon avis. Pour obtenir un format approprié MM/DD/YYYY nous pouvons utiliser quelque chose comme:

new Date(dateString).toLocaleDateString('en-US', {
  day: '2-digit',
  month: '2-digit',
  year: 'numeric',
})
0
Constantin