摘要:我不是的深度用戶只是日常會遇到一些時間格式化的需求之前用的都是不過對的感到有些不舒服同事介紹過里邊用不可變數(shù)據(jù)的風(fēng)格設(shè)計(jì)的所以就試試上星星很多請放心食用是項(xiàng)目的某個維護(hù)者開發(fā)的按照他個人想法進(jìn)行了改進(jìn)除了不可變性使用的工具做了更新也嘗試到時
我不是 Moment 的深度用戶, 只是日常會遇到一些時間格式化的需求,
之前用的都是 Moment, 不過對 Moment 的 mutable API 感到有些不舒服,
同事介紹過 Luxon, 里邊用不可變數(shù)據(jù)的風(fēng)格設(shè)計(jì)的 API, 所以就試試.
GitHub 上星星很多, 請放心食用 https://github.com/moment/luxon
Luxon 是 Moment 項(xiàng)目的某個維護(hù)者開發(fā)的, 按照他個人想法進(jìn)行了改進(jìn),
除了不可變性, 使用的工具做了更新, 也嘗試到時區(qū)做了更好的一些調(diào)整,
具體要看作者原文說明了 https://moment.github.io/luxo...
文檔有詳細(xì)描述 https://moment.github.io/luxo...
最明顯的一個例子, 就是不可變性(Immutability), 比如在 Moment 當(dāng)中修改時間:
var m1 = moment(); var m2 = m1.add(1, "hours"); m1.valueOf() === m2.valueOf(); //=> true
原來的對象是會被修改的. 但是在 Luxon 當(dāng)中舊的對象會保持不變:
var d1 = DateTime.local(); var d2 = d1.plus({ hours: 1 }); d1.valueOf() === d2.valueOf(); //=> false
這樣, 基于舊的時間推移計(jì)算出新的時間的時候, 不用擔(dān)心舊的數(shù)據(jù)被意外修改了.
在 API 風(fēng)格上也有不小的調(diào)整. 比如例子當(dāng)中就是 DateTime 這個對象了,
總體感覺 Luxon 命名相對啰嗦一點(diǎn), 可能是為了更準(zhǔn)確吧.
可能覺得好的一點(diǎn)就是比如讀取 m.year 用了 Getter 接口, 這個更簡單一點(diǎn).
在上面的鏈接當(dāng)中有詳細(xì)的描述 https://moment.github.io/luxo...
另外專門看了下代碼體積, 看上去是更大了. 反正兩個都挺大的...
https://cdnjs.cloudflare.com/...
https://moment.github.io/luxo...
Luxon 當(dāng)中主要從 DateTime 開始調(diào)用, 根據(jù)平臺不同寫法不一樣,
主要還是用 ES6 的語法引用 DateTime 對象吧:
var DateTime = luxon.DateTime; const { DateTime } = require("luxon"); import { DateTime } from "luxon";
如果是在 ClojureScript 當(dāng)中, 借助 shadow-cljs, 可以這樣寫:
(ns app (:require ["luxon" :refer [DateTime]])) (.log js/console (.local DateTime))創(chuàng)建日期的對象
Luxon 當(dāng)中需要區(qū)分開很多的寫法, 針對不用的格式:
DateTime.local() // 類似 Date.now() DateTime.fromISO(String) DateTime.fromObject(Object) // fromJSDate(date: Date, options: Object): DateTime DateTime.fromMillis(Number) DateTime.fromJSDate(Date)
實(shí)際調(diào)用的結(jié)果比如:
coffee> DateTime.local() DateTime { ts: 2018-02-21T14:44:35.186+08:00, zone: Asia/Shanghai, locale: en-US } coffee> date = new Date 2018-02-21T06:45:13.151Z coffee> DateTime.fromJSDate(date) DateTime { ts: 2018-02-21T14:45:13.151+08:00, zone: Asia/Shanghai, locale: en-US } coffee> str = date.toISOString() "2018-02-21T06:45:13.151Z" coffee> DateTime.fromISO str DateTime { ts: 2018-02-21T14:45:13.151+08:00, zone: Asia/Shanghai, locale: en-US }
再具體一些的用法, 可以去翻 API 文檔:
https://moment.github.io/luxo...
內(nèi)置格式?jīng)]有怎么研究, 需要看上去業(yè)務(wù)不大用到, 提供格式盡管不少,
dt.toISO(); //=> "2017-04-20T11:32:00.000-04:00"
日期的格式化通過 dt.toFormat 方法來完成, 類似 m.format,
細(xì)節(jié)有些小的區(qū)別, 但是參考著文檔來寫吧:
https://moment.github.io/luxo...
DateTime.local().toFormat("HH "hours and" mm "minutes"") //=> "20 hours and 55 minutes"日期的操作
請參考文檔 https://moment.github.io/luxo...
DateTime.local(2017, 2, 13).plus({ months: 1 }).toISODate() //=> "2017-03-13" d1 < d2 // is d1 before d2? d1.hasSame(d2, "milllisecond"); // equivalent to `+d1 === +d2` d1.hasSame(d2, "minute"); // both DateTimes are in the same minute (and hour, day, month, etc) d1.hasSame(d2, "year"); // etc
Luxon 里有專門關(guān)于 Duration 的計(jì)算, 不大熟悉, 我就直接抄幾個例子過一下了...
https://moment.github.io/luxo...
var dur = Duration.fromObject({ days: 3, hours: 6}) dur.as("minutes") //=> 4680
var end = DateTime.fromISO("2017-03-13"); var start = DateTime.fromISO("2017-02-13"); var diffInMonths = end.diff(start, "months"); diffInMonths.toObject(); //=> { months: 1 }其他
我能想到還有的一個功能是多語言, 因?yàn)?Moment 里就容易用到.
翻了文檔沒有翻到, 只有一些通過操作系統(tǒng) API 處理多語言的描述, 不了解...
https://moment.github.io/luxo...
關(guān)于時區(qū), Luxon 當(dāng)中直接有支持, 看上去內(nèi)容挺多, 然而不了解...
https://moment.github.io/luxo...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/107543.html
摘要:已被所有主流瀏覽器支持在過去幾周蘋果的瀏覽器與微軟的瀏覽器分別發(fā)布新版本,支持了,再加上早已支持的和,已得到所有主流瀏覽器支持。 showImg(https://segmentfault.com/img/remote/1460000012086220?w=1240&h=823); 前端每周清單第 40 期: JS 的 Core 與 Cost,Node 內(nèi)存溢出調(diào)試,Software 2...
摘要:大家在項(xiàng)目中一定會遇到很多關(guān)于時間處理的問題,比如你想獲取一個本地時間格式為,常用的方法是先拿到時間再用正則替換什么的。 大家在項(xiàng)目中一定會遇到很多關(guān)于時間處理的問題,比如你想獲取一個本地時間格式為YYYY-MM-DD,常用的方法是先拿到時間再用正則替換什么的。比較麻煩,也比較費(fèi)勁。每次都要弄。所以呢就想著有沒有什么簡單的方法,之后就發(fā)現(xiàn)了一個輕量級的Javascript日期處理類庫:...
摘要:函數(shù)庫動畫庫動畫庫,也是目前最通用的動畫庫。下拉框級聯(lián)選擇器移動端最好用的的篩選器組件聯(lián)動篩選移動端最好用的的篩選器組件聯(lián)動篩選顏色選擇器時間選擇器時間日期處理是一個解析,驗(yàn)證,操作和顯示日期和時間的類庫。 showImg(https://segmentfault.com/img/bVbjpHt?w=900&h=383); 前言 在開發(fā)中,我們經(jīng)常會將一些常用的代碼塊、功能塊進(jìn)行封裝,...
摘要:日期處理類庫文檔前天在實(shí)現(xiàn)日期選擇器引用日期處理庫,覺得有必要將常用的方法記錄下來,特此一記。首發(fā)一文取值獲取年月日時分秒獲取星期天周操作一天后一周后一月后一年后一天前一周前一月前一年前 Javascript 日期處理類庫 (moment.js) moment文檔: http://momentjs.cn/ 前天在實(shí)現(xiàn)日期選擇器引用moment日期處理庫,覺得有必要將常用的方法記錄下來,...
摘要:寫此文的目的是為了總結(jié)在開發(fā)中能增加我們開發(fā)速度及能給我們帶來方便的工具與網(wǎng)站及一些小眾框架只限于簡介不負(fù)責(zé)教程如有相應(yīng)的教程希望大家自薦或推薦我在這里感激不盡讓我們發(fā)現(xiàn)美并記錄它第一次寫文章請多多包涵如有我沒有寫到的但又是一些好用的工具及 寫此文的目的是為了總結(jié)在開發(fā)中能增加我們開發(fā)速度及能給我們帶來方便的工具與網(wǎng)站及一些小眾框架只限于簡介不負(fù)責(zé)教程如有相應(yīng)的教程希望大家自薦或推薦我...
閱讀 3179·2023-04-25 17:19
閱讀 625·2021-11-23 09:51
閱讀 1352·2021-11-08 13:19
閱讀 787·2021-09-29 09:34
閱讀 1686·2021-09-28 09:36
閱讀 1502·2021-09-22 14:59
閱讀 2718·2019-08-29 16:38
閱讀 2062·2019-08-26 13:40