<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 5日期和時間 ### 計算復活節的日期 ### 問題 你需要在給出的年份中找到復活節的月份和日期。 ### 解決方案 下面的函數返回數組有兩個要素:復活節的月份( 1-12 )和日期。如果沒有給出任何參數,給出的結果是當前的一年。這是 在CoffeeScript 的[匿名公歷算法](https://en.wikipedia.org/wiki/Computus#Anonymous_Gregorian_algorithm)實現的。 ~~~ gregorianEaster = (year = (new Date).getFullYear()) -> a = year % 19 b = ~~(year / 100) c = year % 100 d = ~~(b / 4) e = b % 4 f = ~~((b + 8) / 25) g = ~~((b - f + 1) / 3) h = (19 * a + b - d - g + 15) % 30 i = ~~(c / 4) k = c % 4 l = (32 + 2 * e + 2 * i - h - k) % 7 m = ~~((a + 11 * h + 22 * l) / 451) n = h + l - 7 * m + 114 month = ~~(n / 31) day = (n % 31) + 1 [month, day] ~~~ ### 討論 Javascript 中的月份是 0-11 。getMonth() 查找的是三月的話將返回數字 2 ,這個函數會返回 3 。如果你想要這個功能是一致的,你可以修改這個函數。 該函數使用`~~`符號代替來 Math.floor() 。 ~~~ gregorianEaster() # => [4, 24] (April 24th in 2011) gregorianEaster 1972 # => [4, 2] ~~~ ### 計算(美國和加拿大的)感恩節日期 ### 問題 你需要在給出的年份中找到感恩節的月份和日期。 ### 解決方案 下面的函數返回給出年份的感恩節的日期。如果沒有給出任何參數,給出的結果是當前年份。 美國的感恩節是十一月的第四個星期四。   ~~~ thanksgivingDayUSA = (year = (new Date).getFullYear()) -> first = new Date year, 10, 1 day_of_week = first.getDay() 22 + (11 - day_of_week) % 7 ~~~ 加拿大的感恩節是在十月的第二個周一。 ~~~ thanksgivingDayCA = (year = (new Date).getFullYear()) -> first = new Date year, 9, 1 day_of_week = first.getDay() 8 + (8 - day_of_week) % 7 ~~~ ### 討論 ~~~ thanksgivingDayUSA() #=> 24 (November 24th, 2011) ? thanksgivingDayCA() # => 10 (October 10th, 2011) ? thanksgivingDayUSA(2012) # => 22 (November 22nd) ? thanksgivingDayCA(2012) # => 8 (October 8th) ~~~ 這個想法很簡單: 1. 找出哪一天是以下各月份的第一天(美國十一月,加拿大十月)。 1. 計算從那天起偏移到下一個工作日的量(美國星期四,加拿大星期一)。 1. 將這個偏移量加上第一個可能的假期日期(第二十二個美國感恩節,第八個加拿大感恩節)。 ### 計算兩個日期中間的天數 ### 問題 你需要找出兩個日期間隔了幾年,幾個月,幾天,幾個小時,幾分鐘,幾秒。 ### 解決方案 利用 JavaScript 的日期計算函數 getTime() 。它提供了從 1970 年 1 月 1 日開始經過了多少毫秒。 ~~~ DAY = 1000 * 60 * 60 * 24 ? d1 = new Date('02/01/2011') d2 = new Date('02/06/2011') ? days_passed = Math.round((d2.getTime() - d1.getTime()) / DAY) ~~~ ### 討論 使用毫秒,使計算時間跨度更容易,以避免日期的溢出錯誤。所以我們首先計算一天有多少毫秒。然后,給出了 2 個不同的日期,只須知道在 2 個日期之間的毫秒數,然后除以一天的毫秒數,這將得到 2 個不同的日期之間的天數。 如果你想計算出 2 個日期對象的小時數,你可以用毫秒的時間間隔除以一個小時有多少毫秒來得到。同樣的可以得到幾分鐘和幾秒。 ~~~ HOUR = 1000 * 60 * 60 ? d1 = new Date('02/01/2011 02:20') d2 = new Date('02/06/2011 05:20') ? hour_passed = Math.round((d2.getTime() - d1.getTime()) / HOUR) ~~~ ### 找到一個月中的最后一天 ### 問題 你需要去找出一個月的最后一天,但是一年中的各月并沒有一個固定時間表。 ### 解決方案 利 用JavaScript 的日期下溢來找到給出月份的第一天: ~~~ now = new Date lastDayOfTheMonth = new Date(1900+now.getYear(), now.getMonth()+1, 0) ~~~ ### 討論 JavaScript 的日期構造函數成功地處理溢出和下溢情況,使日期的計算變得很簡單。鑒于這種簡單操作,不需要擔心一個給定的月份里有多少天;只需要用數學稍加推導。在十二月,以上的解決方案就是尋找當前年份的第十三個月的第 0 天日期,那么它就是下一年的一月一日,也計算出來今年十二月份 31 號的日期。 ### 找到上一個月(或下一個月) ### 問題 你需要計算相關日期范圍例如“上一個月”,“下一個月”。 ### 解決方案 添加或減去當月的數字,JavaScript 的日期構造函數會修復數學知識。 ~~~ # these examples were written in GMT-6 ? # Note that these examples WILL work in January! ? now = new Date # => "Sun, 08 May 2011 05:50:52 GMT" ? ? lastMonthStart = new Date 1900+now.getYear(), now.getMonth()-1, 1 # => "Fri, 01 Apr 2011 06:00:00 GMT" ? ? lastMonthEnd = new Date 1900+now.getYear(), now.getMonth(), 0 # => "Sat, 30 Apr 2011 06:00:00 GMT" ~~~ ### 討論 JavaScript 的日期對象會處理下溢和溢出的月和日,并將相應調整日期對象。例如,你可以要求尋找三月的第 42 天,你將獲得 4 月 11 日。 JavaScript 對象存儲日期為從 1900 開始的每年的年份數,月份為一個 0 到 11 的整數,日期為從 1 到 31 的一個整數。在上述解決方案中,上個月的起始日是要求在本年度某一個月的第一天,但月是從 -1 至 10 。如果月是 -1 的日期對象將實際返回為前一年的十二月: ~~~ lastNewYearsEve = new Date 1900+now.getYear(), -1, 31 # => "Fri, 31 Dec 2010 07:00:00 GMT" ~~~ 對于溢出是同樣的: ~~~ thirtyNinthOfFourteember = new Date 1900+now.getYear(), 13, 39 # => "Sat, 10 Mar 2012 07:00:00 GMT" ~~~ ### 計算月球的相位 ### 問題 你想找出月球的相位。 ### 解決方案 以下代碼提供了一種計算給出日期的月球相位計算方案: ~~~ # moonPhase.coffee ? ? # Moon-phase calculator ? # Roger W. Sinnott, Sky & Telescope, June 16, 2006 ? # http://www.skyandtelescope.com/observing/objects/javascript/moon_phases ? # ? # Translated to CoffeeScript by Mike Hatfield @WebCoding4Fun ? ? proper_ang = (big) -> tmp = 0 if big > 0 tmp = big / 360.0 tmp = (tmp - (~~tmp)) * 360.0 else tmp = Math.ceil(Math.abs(big / 360.0)) tmp = big + tmp * 360.0 ? tmp ? jdn = (date) -> month = date.getMonth() day = date.getDate() year = date.getFullYear() zone = date.getTimezoneOffset() / 1440 ? mm = month dd = day yy = year ? yyy = yy mmm = mm if mm < 3 yyy = yyy - 1 mmm = mm + 12 ? day = dd + zone + 0.5 a = ~~( yyy / 100 ) b = 2 - a + ~~( a / 4 ) jd = ~~( 365.25 * yyy ) + ~~( 30.6001 * ( mmm+ 1 ) ) + day + 1720994.5 jd + b if jd > 2299160.4999999 ? moonElong = (jd) -> dr = Math.PI / 180 rd = 1 / dr meeDT = Math.pow((jd - 2382148), 2) / (41048480 * 86400) meeT = (jd + meeDT - 2451545.0) / 36525 meeT2 = Math.pow(meeT, 2) meeT3 = Math.pow(meeT, 3) meeD = 297.85 + (445267.1115 * meeT) - (0.0016300 * meeT2) + (meeT3 / 545868) meeD = (proper_ang meeD) * dr meeM1 = 134.96 + (477198.8676 * meeT) + (0.0089970 * meeT2) + (meeT3 / 69699) meeM1 = (proper_ang meeM1) * dr meeM = 357.53 + (35999.0503 * meeT) meeM = (proper_ang meeM) * dr ? elong = meeD * rd + 6.29 * Math.sin( meeM1 ) elong = elong - 2.10 * Math.sin( meeM ) elong = elong + 1.27 * Math.sin( 2*meeD - meeM1 ) elong = elong + 0.66 * Math.sin( 2*meeD ) elong = proper_ang elong elong = Math.round elong ? moonNum = ( ( elong + 6.43 ) / 360 ) * 28 moonNum = ~~( moonNum ) ? if moonNum is 28 then 0 else moonNum ? getMoonPhase = (age) -> moonPhase = "new Moon" moonPhase = "first quarter" if age > 3 and age < 11 moonPhase = "full Moon" if age > 10 and age < 18 moonPhase = "last quarter" if age > 17 and age < 25 ? if ((age is 1) or (age is 8) or (age is 15) or (age is 22)) moonPhase = "1 day past " + moonPhase ? if ((age is 2) or (age is 9) or (age is 16) or (age is 23)) moonPhase = "2 days past " + moonPhase ? if ((age is 3) or (age is 1) or (age is 17) or (age is 24)) moonPhase = "3 days past " + moonPhase ? if ((age is 4) or (age is 11) or (age is 18) or (age is 25)) moonPhase = "3 days before " + moonPhase ? if ((age is 5) or (age is 12) or (age is 19) or (age is 26)) moonPhase = "2 days before " + moonPhase ? if ((age is 6) or (age is 13) or (age is 20) or (age is 27)) moonPhase = "1 day before " + moonPhase ? moonPhase ? MoonPhase = exports? and exports or @MoonPhase = {} ? class MoonPhase.Calculator getMoonDays: (date) -> jd = jdn date moonElong jd ? getMoonPhase: (date) -> jd = jdn date getMoonPhase( moonElong jd ) ~~~ ### 討論 此代碼顯示一個月球相位計算器對象的方法有兩種。計算器 -> getmoonphase 將返回一用個文本表示的日期的月球相位。 這可以用在瀏覽器和 Node.js 中。 ~~~ $ node > var MoonPhase = require('./moonPhase.js'); undefined > var calc = new MoonPhase.Calculator(); undefined > calc.getMoonPhase(new Date()); 'full moon' > calc.getMoonPhase(new Date(1972, 6, 30)); '3 days before last quarter' ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看