2010-12-09 14 views
35

Je continue d'enrouler ma tête autour de cette bibliothèque, mais je n'ai plus de temps juste passer à la section spoiler et demander. Avec une valeur de temps arbitraire donnée (comme celle que vous avez donnée de .getTime()), comment obtenir la minute, l'heure, le jour, la semaine du mois, le mois, la semaine de l'année et l'année de cette milliseconde de temps?Javascript, heure et date: Obtenir la minute, l'heure, le jour, la semaine, le mois et l'année d'une milliseconde donnée

En outre, comment puis-je récupérer le nombre de jours d'un mois donné? Tout ce que je devrais savoir concernant les années bissextiles et d'autres choses?

+0

Il est expliqué dans la spécification. Il y a une section qui décrit les méthodes de date, et même les algorithmes abstraits. –

Répondre

58

Les noms de variables doivent être descriptif:

var date = new Date; 
date.setTime(result_from_Date_getTime); 

var seconds = date.getSeconds(); 
var minutes = date.getMinutes(); 
var hour = date.getHours(); 

var year = date.getFullYear(); 
var month = date.getMonth(); // beware: January = 0; February = 1, etc. 
var day = date.getDate(); 

var dayOfWeek = date.getDay(); // Sunday = 0, Monday = 1, etc. 
var milliSeconds = date.getMilliseconds(); 

Les jours d'un mois donné ne changent pas. Dans une année bissextile, le mois de février a 29 jours. Inspiré par http://www.javascriptkata.com/2007/05/24/how-to-know-if-its-a-leap-year/ (merci Peter Bailey!)

Suite du code précédent:

var days_in_months = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; 
// for leap years, February has 29 days. Check whether 
// February, the 29th exists for the given year 
if((new Date(year, 1, 29)).getDate() == 29) days_in_month[1] = 29; 

Il n'y a aucun moyen simple d'obtenir la semaine d'une année. Pour la réponse à cette question, voir Is there a way in javascript to create a date object using year & ISO week number?

+0

Ce n'est pas l'algorithme complet pour déterminer une année bissextile. – bobince

+0

L'a édité après avoir regardé Wikipedia. Merci d'avoir remarqué. – Lekensteyn

+0

L'idée est juste, je pense que la logique est un peu éteinte ... peut-être 'year% 400 === 0 || (année% 4 === 0 && année% 100! == 0) '. – bobince

3

En ce qui concerne le nombre de jours par mois, il suffit d'utiliser la commande de commutation statique et de vérifier if (year % 4 == 0), auquel cas le mois de février aura 29 jours.

minute, heure, jour etc:

var someMillisecondValue = 511111222127; 
var date = new Date(someMillisecondValue); 
var minute = date.getMinutes(); 
var hour = date.getHours(); 
var day = date.getDate(); 
var month = date.getMonth(); 
var year = date.getFullYear(); 
alert([minute, hour, day, month, year].join("\n")); 
+0

Pour vérifier une année bissextile, vous devez cocher 'if (((année% 4 == 0) && (année% 100! = 0) || (année% 400 == 0))'. Ceci est la définition du Calendrier grégorien –

1

De plus, comment puis-je récupérer le nombre de jours d'un mois donné?

En plus de calculer vous-même (et par conséquent d'avoir à obtenir des années bissextiles à droite), vous pouvez utiliser un calcul de date pour le faire:

var y= 2010, m= 11;   // December 2010 - trap: months are 0-based in JS 

var next= Date.UTC(y, m+1); // timestamp of beginning of following month 
var end= new Date(next-1);  // date for last second of this month 
var lastday= end.getUTCDate(); // 31 

En général pour le calcul horodatage/date que je vous recommande en utilisant les méthodes UTC de Date, comme getUTCSeconds au lieu de getSeconds(), et Date.UTC pour obtenir un horodatage d'une date UTC, plutôt que new Date(y, m), donc vous n'avez pas à vous soucier de la possibilité de discontinuités de temps étranges où les règles de fuseau horaire changent.

+0

UTC fonctionne même lorsque le mois se termine décembre (12 et plus)? – Hamster

+0

Oui, cela fonctionne en UTC ou heure locale.(À moins que l'heure locale ne change de fuseau horaire le 1er janvier, auquel cas l'heure locale pourrait mal tourner.) Je ne connais aucun lieu où cela se soit jamais produit, mais j'ai toujours appris à me méfier de la situation. choses étranges que les règles locales de fuseau horaire peuvent générer ...) – bobince

3

Voici une autre méthode pour obtenir la date

new Date().getDate()   // Get the day as a number (1-31) 
new Date().getDay()   // Get the weekday as a number (0-6) 
new Date().getFullYear()  // Get the four digit year (yyyy) 
new Date().getHours()   // Get the hour (0-23) 
new Date().getMilliseconds() // Get the milliseconds (0-999) 
new Date().getMinutes()  // Get the minutes (0-59) 
new Date().getMonth()   // Get the month (0-11) 
new Date().getSeconds()  // Get the seconds (0-59) 
new Date().getTime()   // Get the time (milliseconds since January 1, 1970)