Bootstrap 3時間控件datetimepicker的時區(qū)及多語言問題

文章作者:Tyan
博客:noahsnail.com

????????在Web應(yīng)用開發(fā)中绣溜,特別是前端開發(fā)中溢豆,經(jīng)常會碰到的一個問題是時間選擇問題吨岭,幸好Bootstrap已經(jīng)為我們提供了時間選擇控件datetimepicker模燥,但在datetimepicker的實(shí)際開發(fā)使用中仍然會有一些小問題,例如根據(jù)國家來進(jìn)行顯示時間的時區(qū)變換锻弓。作者也是碰了好多坑之后才把這個控件的用法弄清楚了砾赔,記錄一下以便給后來者提供參考。

????????本文使用的datetimepicker控件為Eonasdan-bootstrap-datetimepicker青灼,它是基于Bootstrap 3的暴心,官網(wǎng)地址為:https://eonasdan.github.io/bootstrap-datetimepicker/

使用這個控件的要求:

  • jQuery 官網(wǎng):https://jquery.com/
  • Moment.js 包括moment-timezone,現(xiàn)在moment和timezone分開了聚至,官網(wǎng):http://momentjs.com/
  • Bootstrap.js (transition and collapse are required if you're not using the full Bootstrap) 官網(wǎng):http://getbootstrap.com/
  • Bootstrap Datepicker script
  • Bootstrap CSS
  • Bootstrap Datepicker CSS
  • Locales: Moment's locale files are here

基本的配置如下(路徑自己去修改):

//stylesheet
<link rel="stylesheet" href="../bootstrap/css/bootstrap.min.css"/>
<link rel="stylesheet" href="../bootstrap/css/bootstrap-theme.min.css"/>
<link rel="stylesheet" href="../bootstrap-datepicker/css/bootstrap-datepicker3.min.css"/>
<link rel="stylesheet" href="../Eonasdan-bootstrap-datetimepicker/css/bootstrap-datetimepicker.min.css"/>

//js
<script src="../class.support/class.support.min.js"></script>
<script src="../jquery/jquery.min.js"></script>
<script src="../moment/moment.min.js"></script> //對應(yīng)時區(qū)
<script src="../moment/locales.min.js"></script> //對應(yīng)本地化
<script src="../moment/moment-timezone-with-data.min.js"></script>
<script src="../bootstrap/js/bootstrap.min.js"></script>
<script src="../bootstrap-datepicker/js/bootstrap-datepicker.min.js"></script>
<script src="../Eonasdan-bootstrap-datetimepicker/js/bootstrap-datetimepicker.min.js"></script>

控件使用:

// html代碼:
<div class="input-group date"  id="testDate">
    <input class="form-control" type="text"/>
    <span class="input-group-addon" >
        <span class="glyphicon glyphicon-calendar"></span>
    </span>
</div>

//jQuery代碼

$('#testDate').datetimepicker({
    sideBySide: true //可以同時選擇日期和時間
});
$('#testDate').data('DateTimePicker').format('YYYY-MM-DD HH:mm'); //格式化日期顯式格式
$('#testDate').data('DateTimePicker').date(moment()); //設(shè)置控件時間

????????效果如下:

image

????????上面的代碼只是一個基本用法酷勺,使用的時間都是系統(tǒng)默認(rèn)時間,如果要指定控件顯式時間的時區(qū)扳躬,代碼如下:

moment.tz.setDefault('Asia/Seoul'); //設(shè)置moment時區(qū)
$('#testDate').data('DateTimePicker').timeZone('Asia/Seoul'); //設(shè)置控件時區(qū)

注:二者需要同時設(shè)置且對應(yīng)脆诉,否則會出現(xiàn)各種奇怪問題,作者在此吃過大虧贷币。有了這兩行代碼就可以支持多國家時間顯示击胜,可以根據(jù)選擇的國家來顯式對應(yīng)的時間。

????????后臺保存時間時役纹,需要保存為long型時間戳(timestamp)偶摔,代碼如下:

var testDate = moment($('#testDate').data('DateTimePicker').date()).format('x');

????????當(dāng)從后端讀取數(shù)據(jù)向前端顯示時,代碼為:

moment.tz(testDate, 'Asia/Seoul').format('YYYY/MM/DD HH:mm') //顯示時間對應(yīng)時區(qū)

注:此時顯示的時間是對應(yīng)保存時時區(qū)的對應(yīng)時間促脉,這樣可以做到保存的時間與讀取顯示的時間是一致的辰斋。

????????除了上面的時區(qū)之外,還可能涉及到控件的本地化問題瘸味,即控件的語言與國家一致宫仗,代碼如下:

$('#testDate').data('DateTimePicker').locale('ko'); //設(shè)置控件的語言

????????效果如圖:

image

總結(jié):Eonasdan-bootstrap-datetimepicker這個控件功能挺強(qiáng)大的,當(dāng)然依賴的東西也很多旁仿,網(wǎng)上有用能解決你的問題的資料不是很多藕夫,很多功能都需要自己去看文檔摸索。本文主要是對控件本地化的探索,所謂本地化是指根據(jù)國家顯示對應(yīng)時間毅贮,控件顯示對應(yīng)國家的語言办悟,時間保存之后再取出顯示時間的一致性問題,完全可以做成支持多國家多語言的控件滩褥,并可根據(jù)選擇國家自動修改控件語言和控件時間病蛉。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市铸题,隨后出現(xiàn)的幾起案子铡恕,更是在濱河造成了極大的恐慌琢感,老刑警劉巖丢间,帶你破解...
    沈念sama閱讀 218,122評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異驹针,居然都是意外死亡烘挫,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評論 3 395
  • 文/潘曉璐 我一進(jìn)店門柬甥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來饮六,“玉大人,你說我怎么就攤上這事苛蒲÷遍希” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評論 0 354
  • 文/不壞的土叔 我叫張陵臂外,是天一觀的道長窟扑。 經(jīng)常有香客問我,道長漏健,這世上最難降的妖魔是什么嚎货? 我笑而不...
    開封第一講書人閱讀 58,636評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮蔫浆,結(jié)果婚禮上殖属,老公的妹妹穿的比我還像新娘。我一直安慰自己瓦盛,他們只是感情好洗显,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著原环,像睡著了一般挠唆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上扮念,一...
    開封第一講書人閱讀 51,541評論 1 305
  • 那天损搬,我揣著相機(jī)與錄音,去河邊找鬼。 笑死巧勤,一個胖子當(dāng)著我的面吹牛嵌灰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播颅悉,決...
    沈念sama閱讀 40,292評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼沽瞭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了剩瓶?” 一聲冷哼從身側(cè)響起驹溃,我...
    開封第一講書人閱讀 39,211評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎延曙,沒想到半個月后豌鹤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡枝缔,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評論 3 336
  • 正文 我和宋清朗相戀三年布疙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片愿卸。...
    茶點(diǎn)故事閱讀 39,965評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡灵临,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出趴荸,到底是詐尸還是另有隱情儒溉,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評論 5 347
  • 正文 年R本政府宣布发钝,位于F島的核電站顿涣,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏笼平。R本人自食惡果不足惜园骆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望寓调。 院中可真熱鬧锌唾,春花似錦、人聲如沸夺英。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽痛悯。三九已至余黎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間载萌,已是汗流浹背惧财。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評論 1 269
  • 我被黑心中介騙來泰國打工巡扇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人垮衷。 一個月前我還...
    沈念sama閱讀 48,126評論 3 370
  • 正文 我出身青樓厅翔,卻偏偏與公主長得像,于是被迫代替她去往敵國和親搀突。 傳聞我的和親對象是個殘疾皇子刀闷,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評論 2 355

推薦閱讀更多精彩內(nèi)容

  • JavaScript 資源大全中文版很多程序員應(yīng)該記得 GitHub 上有一個 Awesome - XXX 系列的...
    wwmin_閱讀 3,442評論 1 92
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,133評論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件仰迁、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,103評論 4 62
  • 人的惰性真的不是一般的大甸昏,我今天打開微信公眾號發(fā)現(xiàn),我上一篇文章發(fā)布是在9月7號徐许,今天是9月19號施蜜,已經(jīng)整整過去1...
    梧桐兮兮閱讀 334評論 0 0
  • 上海現(xiàn)代出租車行業(yè)自發(fā)展以來已經(jīng)有20多年的歷史了绊寻。在這樣一個發(fā)展的歷史過程當(dāng)中花墩,我們經(jīng)歷了從低谷悬秉,到高峰...
    虹海張波閱讀 1,732評論 1 2