追求JS小姊姊系列 Day9 -- 如果时间能重来,我不想跟工具人聊天(上)

前情提要

上一集让人等到很崩溃的,终於..郑列终於吹嘘完了

阿物件:我跟你说...
:... (接下来难道要换阿物件吹嘘了吗?...要是时间能重来就好了)
????让我来帮你吧?告诉我,你想去的时间吧
:(...?虽然不知道是谁)我想回到8月16号,这样就有一个月可以准备铁人了
我想回到中秋节9月21日前追踪JS姐妹们的那天!!
????:交给我吧,建构新的时间


getFullYear() 延伸问题:Y2K背後的问题是?(更新时间:9/24 ,15:35

let goBackTime = new Date();

叫我Date或D特都可以

D特:就叫我D特吧,我的替身能力是Date
:...时间管理大师是你?
D特:并没有,我的这个Date的能力还是有限制的,让我稍微跟你讲讲吧:

  1. Date的时间是基於世界标准时间(UTC),最早只能回溯到1970 年 1 月 1 日(但跟UNIX epoch计算方不同,UNIX的计算单位只到秒(s),而Date则是到毫秒(millisecond))
  2. 存储的时间单位为毫秒 timestamp(备注:一天为86,400,000毫秒)

开始找出时间前 --- 所以现在时间是?

let rightNow =Date();
let newRightNow = new Date();
console.log(rightNow,newRightNow);

这样差在哪?新跟旧的差别

  1. 若没有建构式new,输出的时间为String型别的时间内容
  2. 若有建构式new,输出的则为object

开始找出每个时间吧

D特:试图回溯时间是不容易的事情,你需要知道并取得以下时间碎片,我会帮你依序取得它们,那些碎片分别是:

  1. 年份
  2. 月份
  3. 日期
  4. 小时
  5. 分钟
  6. 秒数

将这些时间碎片拼凑後,才有可能正确地回到你的时间点

:2021年9月21号星期二的早上10点38分54秒。

const wantToGoDay = new Date('sep 21, 21 10:38:54');

D特:那这样就开始来取得那些碎片吧,拿出容器

let fragmentsOfTime = {};

取得年份 --Date.prototype.getFullYear()

回传值:四位数数字型别的整数(根据local time

let getYear = wantToGoDay.getFullYear();

//装入里面吧
let fragmentsOfTime = {};
fragmentsOfTime.year = getFullYear;
console.log(fragmentsOfTime)

getFullYear()延伸问题:Y2K (更新时间:24/15:35)
(感谢我的队友们热情分享
所谓Y2K问题:
一开始是软件开发者没有意识到会有这个问题,加上硬体成本过高,所以沿袭传统就以2位数表达年份,但时间推进到2000年,程序的年份表达会遇到显示00,但无法辨识背後代表的是1900年 or 2000年?
因此,随着硬体的成本降低,渐渐转用4数表达年份:显示的内容从原本的00变成2000。但硬体的存放空间终究有限,究竟这样4数的存放极限在哪?又为何是所谓的2038问题

    Math.pow(2,31);//得到32位元的值存放极限: 2147483648(s)(世界时间存放系统)
    //这样我们还能存几年?
    let totalTimeStorage = Math.pow(2,31)/86400(每日秒数)/365;
    //就能得到还能存放的时间长度:68
    //在文章中有介绍getFullYear(),最早会从1970开始
    //因此就比较能理解为何是2038灾难
    

另一个取得年份的方式是Date.prototype.getYear()
但是MDN并不推荐使用这个methods,理由如下:

  1. 计算年份的方式
    let Xmas = new Date('dec 24, 1995 23:15:00');
    console.log(Xmas.getYear());

当我们使用getYear()时,它会将你的预设年份值 - 1900,以上面的案例,我们会得到1995-1900 = 95;
试想:当你输入的年份早於1900年会怎样呢?

2. 部分的浏览器已不支援

取得月份 --Date.prototype.getMonth()

回传值:0-11间数字型别的整数(根据local time

let getMonth = wantToGoDay.getMonth();


fragmentsOfTime.date = getDate;
console.log(fragmentsOfTime)

取得日期 --Date.prototype.getDate()

回传值:1-31间数字型别的整数(根据local time

let getDate = wantToGoDay.getDate()
consolle.log(getDate);

fragmentsOfTime.date = getDate;
console.log(fragmentsOfTime)

取得小时 --Date.prototype.getHours()

回传值:0-23间数字型别的整数(根据local time

let getHours = wantToGoDay.getHours()
consolle.log(getHours);

fragmentsOfTime.hours = getHours;
console.log(fragmentsOfTime)

取得分钟

回传值:0-59间数字型别的整数(根据local time

let getMinutes = wantToGoDay.getMinutes()
consolle.log(getMinutes);

fragmentsOfTime.mintues = getMinutes;
console.log(fragmentsOfTime)

取得秒数

回传值:0-59间数字型别的整数(根据local time

let getSeconds = wantToGoDay.getSeconds()
consolle.log(getSeconds);



fragmentsOfTime.seconds = getSeconds;
console.log(fragmentsOfTime)

D特:碎片凑齐了!!
(装碎片容器发出巨光)
.....
...
:修蛋几勒,怎麽没有出去的感觉..?

-- to be continued --


那今天就到这边搂!今天分享喜欢的歌是:
Sidney Bechet - Si tu vois ma mère
https://www.youtube.com/watch?v=HkdCr9HlRE0&list=PLevoGoxUkU1_HrNQhLKotpRUsPMc8CwHf&index=3

每天的休息,是为了後面的追求,明天见。

reference:

  1. https://pjchender.dev/javascript/js-date-time/
  2. https://medium.com/coding-hot-pot/javascript-date%E7%89%A9%E4%BB%B6-e63d80d8a180
  3. MDN-- Date
  4. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleTimeString

<<:  DAY 09 Extends, Inhreitance

>>:  Day 24「小步快跑」Service 与单元测试(上)

虹语岚访仲夏夜-4(专业的小四篇)

亲爱的小四用户您好,心动年代目前更新中,请耐心等候... 30分钟後... 亲爱的小四用户您好,心动...

Day13 - Tree((超出时间也太多了吧QAQ

大家好,我是长风青云。我真的没想到今天我会讲这麽久的影片QAQ 然後我可爱的(?)学弟居然在最後密我...

Day 9 - HTML

前言 说起HTML, 大家觉得它如何? 相比起JavaScript, HTML不是什麽program...

[Day17] Esp32用STA mode + Relay

1.前言 各位有理解loop中很长的咒语吗?不懂得可以多看几次,不要气馁,文章不会跑走,所以继续加油...

Day 03: Python开发环境 Spyder初探

那麽在上一篇已经有安装好了Anaconda了,我们就可以开始使用Anaconda开发环境底下的各式功...