在網(wǎng)頁(yè)應(yīng)用中,時(shí)區(qū)設(shè)置是非常重要的一個(gè)功能,因?yàn)橛脩粼诓煌臅r(shí)區(qū)中,希望看到的時(shí)間是不同的。而javascript可以方便的幫助我們實(shí)現(xiàn)時(shí)區(qū)設(shè)置。下面就詳細(xì)講解一下javascript如何設(shè)置時(shí)區(qū)。
javascript中設(shè)置時(shí)區(qū)的方法,主要是通過(guò)“Date對(duì)象”的一些方法來(lái)實(shí)現(xiàn)的。我們來(lái)看看下面的例子,如何通過(guò)javascript獲取本地當(dāng)前時(shí)間的時(shí)區(qū):
var now = new Date(); var timezone = now.getTimezoneOffset()/-60; alert(timezone); //輸出當(dāng)前本機(jī)所在時(shí)區(qū)為北京時(shí)間,結(jié)果為-8
通過(guò)上面的例子我們可以看到,getTimezoneOffset()函數(shù)會(huì)返回當(dāng)前電腦本機(jī)與UTC時(shí)間的時(shí)差,而以分鐘為單位。我們還將其除以60,就可以得到時(shí)差,單位為小時(shí)。
如果我們需要將時(shí)間格式化成不同時(shí)區(qū)的時(shí)間,可以采用以下代碼:
function formatDate(date, targetTimezone) { var targetTimezoneOffset = targetTimezone * 60; var currentTimestamp = date.getTime(); var currentOffset = date.getTimezoneOffset() * 60; var targetTimestamp = currentTimestamp + currentOffset * 1000 + targetTimezoneOffset * 1000; return new Date(targetTimestamp); } var date = new Date('2019/11/12 18:00:00'); var newDate = formatDate(date, 8); console.log(newDate); //在控制臺(tái)中輸出北京時(shí)間的日期與時(shí)間
通過(guò)上面的代碼,我們將原始時(shí)間加上本地時(shí)區(qū)與目標(biāo)時(shí)區(qū)的時(shí)差,就能將時(shí)間格式化成目標(biāo)時(shí)區(qū)的時(shí)間。
我們還可以利用moment庫(kù),來(lái)更加方便的處理時(shí)區(qū)。下面是一個(gè)moment庫(kù)處理時(shí)間的例子:
moment().subtract(10, 'days').calendar(); moment().subtract(6, 'days').calendar(); moment().subtract(3, 'days').calendar(); moment().subtract(1, 'days').calendar(); moment().calendar(); moment().add(1, 'days').calendar(); moment().add(3, 'days').calendar(); moment().add(10, 'days').calendar();
moment庫(kù)不僅支持時(shí)區(qū)設(shè)置,還支持時(shí)間格式化、根據(jù)日期獲取星期、日期加減等操作,是一個(gè)非常常用而又強(qiáng)大的函數(shù)庫(kù)。
綜上所述,通過(guò)javascript的Date對(duì)象以及moment庫(kù),我們能夠方便快捷的處理時(shí)區(qū)操作。因此,在開(kāi)發(fā)網(wǎng)頁(yè)應(yīng)用時(shí),需要謹(jǐn)記時(shí)區(qū)設(shè)置的問(wèn)題。