Maison >interface Web >js tutoriel >L'explication la plus détaillée de Date en JavaScript
Je ne parlerai pas des bases Date()
~ : )
Je me demande si quelqu'un a rencontré ce problème ? Je pense que si vous avez écrit un composant de date, vous devez avoir ce problème. Ma solution à l'époque était la suivante :
Dans les trois méthodes suivantes, j'ai utilisé 0 comme paramètre de mois en fonction de la définition du mois de. Date en JS lui-même. Janvier
const EVERY_MONTH_DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; function getDays(year, month) { if (month === 1 && isLeap(year)) return 29; return EVERY_MONTH_DAYS[month]; }
est de cartographier manuellement les jours de chaque mois. Février est une année bissextile, Nombre de jours 1
Utilisez simplement un plug-in de calendrier pour osx que vous avez écrit vous-même http://www.php.cn/
N'existe-t-il pas une meilleure façon ? Ce serait bien s'il n'y avait pas de logique pour la cartographie manuelle et le jugement des années bissextiles.
function getDays(year, month) { if (month === 1) return new Date(year, month, 29).getMonth() === 1 ? 29 : 28; return new Date(year, month, 31).getMonth() === month ? 31 : 30; }
Nous avons constaté que le troisième paramètre de new Date()
peut être plus grand que ce que nous connaissons Le dernier jour de chaque mois, par exemple :
new Date(2016, 0, 200) //Mon Jul 18 2016 00:00:00 GMT+0800 (CST)
De cette façon, nous utiliserons les caractéristiques de ce JS et utiliserons les deux touches 29 et 31 Click , pour juger si c'est le dernier jour de ce mois sauf 1 ou ce mois-là ? (En fait, 28 et 30 sont les points clés).
function getDays(year, month) { return new Date(year, month + 1, 0).getDate(); }
Que se passe-t-il si le troisième paramètre de new Date()
reçoit une valeur inférieure à 1. ? , par exemple, si on passe 0, on obtiendra le dernier jour du mois dernier. Bien sûr, il n'y a pas de problème si on passe des nombres négatifs :
new Date(2016, 0, -200) //Sun Jun 14 2015 00:00:00 GMT+0800 (CST)
<.>
Date.prototype. Divers StringL'explication spécifique du document est trop paresseuse pour être copiée pour que tout le monde puisse la voir. Lien de référence : https://developer.mozilla.org/en-US/docs/. Web/JavaScript/Reference/Global_Objects/DateVoici principalement pour vulgariser les connaissances suivantes auprès de tous : GMT (Greenwich Mean Time) Greenwich Mean Time (aussi connu comme Greenwich Mean Time ou Greenwich Mean Time, l'ancienne traduction est Greenwich Mean Time ; l'anglais Greenwich Mean Time (GMT) fait référence à l'heure standard de l'Observatoire royal de Greenwich dans la banlieue de Londres, en Angleterre, car le méridien d'origine est défini sur le longitude y passant. Depuis le 5 février 1924, l'Observatoire de Greenwich distribue toutes les heures au monde des informations sur le réglage de l'heure. Théoriquement, midi dans le temps moyen de Greenwich fait référence au moment où le soleil traverse le méridien de Greenwich (c'est-à-dire lorsqu'il est à son point le plus élevé au-dessus de Greenwich). En raison du mouvement irrégulier de la Terre sur son orbite elliptique, cette heure peut différer de l’heure solaire réelle, avec une erreur maximale pouvant atteindre 16 minutes. La rotation quotidienne de la Terre étant quelque peu irrégulière et ralentissant lentement, l'heure moyenne de Greenwich n'est plus utilisée comme heure standard. L’heure standard actuelle est le temps universel coordonné (UTC), qui est rapporté par les horloges atomiques. Nous voyons donc également dans la documentation sur MDN que l'explication de
est : toGMTString()
Renvoie une chaîne représentant la date basée sur le fuseau horaire GMT (UT). toUTCString() à la place.UTC (Heure standard universelle)Temps universel coordonné, également connu sous le nom de Temps standard universel ou Temps universel coordonné, appelé UTC (de l'anglais "Cooperative Temps Universel" / Du français "Temps Universel Cordonné"), c'est l'étalon horaire mondial le plus important. Il est basé sur le temps atomique et la seconde, et est aussi proche que possible du temps moyen de Greenwich CST (Heure de Pékin)
if ( !Date.prototype.toISOString ) { ( function() { function pad(number) { if ( number < 10 ) { return '0' + number; } return number; } Date.prototype.toISOString = function() { return this.getUTCFullYear() + '-' + pad( this.getUTCMonth() + 1 ) + '-' + pad( this.getUTCDate() ) + 'T' + pad( this.getUTCHours() ) + ':' + pad( this.getUTCMinutes() ) + ':' + pad( this.getUTCSeconds() ) + '.' + (this.getUTCMilliseconds() / 1000).toFixed(3).slice(2, 5) + 'Z'; }; }() ); }Grâce à Polyfill, nous pouvons savoir comment ISO représente le temps, la chose la plus importante La caractéristique est que le dernier chiffre est "Z", et qu'il représente toujours l'heure UTC. Ajouts supplémentaires.valueOf() et .getTime()
ont les mêmes fonctions que .valueOf()
. .getTime()
, les instances de valueOf
ne peuvent pas effectuer d'opérations. Date
var obj = Object.create(null); obj + 1; // Uncaught TypeError: Cannot convert object to primitive value(…).toJSONQuand j'ai regardé directement le nom de cette API, j'ai pensé qu'elle renverrait une chaîne au format JSON, mais en fait, c'est une telle chose
new Date().toJSON() // "2016-05-05T06:03:28.130Z"En fait, c'est une telle chose
JSON.stringify(new Date()) // ""2016-05-05T06:06:02.615Z""Le résultat peut-il être analysé ?
JSON.parse(JSON.stringify(new Date())) // "2016-05-05T06:19:24.766Z" JSON.parse('"' + new Date().toJSON() + '"') // "2016-05-05T06:19:24.766Z"Mais le résultat n'est qu'une chaîne. Vous devez remettre cette chaîne à
. new Date()
.toLocaleDateString()
.toLcale各种String(locales [, options]])
.
妈的这个 API 有点烦,看 MDN 的文档你就知道。这个 API 是用来本地化时间的。
这里稍微说下我对这些参数的理解:
locales
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0)); // formats below assume the local time zone of the locale; // America/Los_Angeles for the US // US English uses month-day-year order alert(date.toLocaleString("en-US")); // → "12/19/2012, 7:00:00 PM" // British English uses day-month-year order alert(date.toLocaleString("en-GB")); // → "20/12/2012 03:00:00" // Korean uses year-month-day order alert(date.toLocaleString("ko-KR")); // → "2012. 12. 20. 오후 12:00:00" // Arabic in most Arabic speaking countries uses real Arabic digits alert(date.toLocaleString("ar-EG")); // → "٢٠/١٢/٢٠١٢ ٥:٠٠:٠٠ ص" // for Japanese, applications may want to use the Japanese calendar, // where 2012 was the year 24 of the Heisei era alert(date.toLocaleString("ja-JP-u-ca-japanese")); // → "24/12/20 12:00:00" // when requesting a language that may not be supported, such as // Balinese, include a fallback language, in this case Indonesian alert(date.toLocaleString(["ban", "id"])); // → "20/12/2012 11.00.00"
以locales
所指的地区的时区和语言输出。
options
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString
localeMatcher
选择本地匹配的什么算法,似乎没什么大用
timeZone
再设置下 UTC 时区
hour12
是否12小时制
formatMatcher
各日期时间单元的格式化
weekday
Possible values are "narrow", "short", "long"
.
era
Possible values are "narrow", "short", "long"
.
year
Possible values are "numeric", "2-digit"
.
month
Possible values are "numeric", "2-digit", "narrow", "short", "long"
.
day
Possible values are "numeric", "2-digit"
.
hour
Possible values are "numeric", "2-digit"
.
minute
Possible values are "numeric", "2-digit"
.
second
Possible values are "numeric", "2-digit"
.
timeZoneName
Possible values are "short", "long"
.
栗子:
var date = new Date(Date.UTC(2012, 11, 20, 3, 0, 0)); date.toLocaleString("en-US", {hour12: false}); // "12/19/2012, 19:00:00" var options = {timeZoneName:'long',weekday: "long", year: "2-digit", month: "narrow", day: "numeric"}; date.toLocaleString("en-US", options); // "Thursday, D 20, 12, China Standard Time"
插一个JavaScript 显示 Y-m-d H:i:s 的日期时间格式
let date = new Date(); let result = [ [ date.getFullYear(), date.getMonth() + 1, date.getDate() ].join('-'), [ date.getHours(), date.getMinutes(), date.getSeconds() ].join(':') ].join(' ').replace(/\b\d\b/g, '0$&');
var date = new Date(); var result = date.toLocaleString('zh-CN', { hour12: false }) .replace(/\//g, '-').replace(/\b\d\b/g, '0$&');
https://github.com/moment/moment
https://github.com/rmm5t/jquery-timeago
以上就是关于JavaScript 的 Date 最详细解读的内容,更多相关内容请关注PHP中文网(www.php.cn)!