公司的專案是面向海外使用者的,但是最初的設計沒考慮到時差問題,存入資料庫的時間都是東八區的時間,導致現在補救有點坑爹......
有乙個需求是,產品詳細頁需要註明此款產品的開售時間,當海外的使用者來訪問這個頁面時,不應該顯示的是東八區的時間,而應該顯示當地時區對應的時間。
.net的類庫里沒有獲取客戶端當地時區的方法的,比如tolocaltime(),獲取的是伺服器的時間,timezoneinfo裡的一些方法,都是正向轉化,必須提供已知的時區編號,時區名稱等條件,但這些不是已知時,都是白搭。
查詢了資料,發現只能從js入手,看到有兩種解決方案,一種是用ajax傳到服務端進行處理,第二種是設定cookie在服務端獲取再處理,如果不是大批量的資料呈現,感覺有點麻煩,之後自己寫了乙個方法,具體方案就是從後台讀取的時間,先從前台的js裡轉化,再呈現到頁面上,具體看業務需求。
直接提供js方法吧,如有什麼不對的地方可以提出來:
/** 根據日期寫入時所在的時區號,傳化為客戶端所在時區的時間
* 東:負數,西:正數
* create date:2016-01-27 by harry
*/date.prototype.tolocaltimebyzonenum = function
(zonenum)
//預設傳入東八區
date.prototype.tolocaltime = function
() /*
* 轉化成國外常用顯示格式
* 1:mon feb 01 2016 12:00:00
* 2:mon feb 01 2016
* 3:feb 01 2016
* 4:feb 01,2016
* create date:2016-01-28 by harry
*/date.prototype.toglobaltime = function
(type) )/, "$1\n,");
break
;
default
:
return
this
;
break
; }
}附加兩個拓展方法,網上搜來的
//對date的擴充套件,將 date 轉化為指定格式的string
//月(m)、日(d)、小時(h)、分(m)、秒(s)、季度(q) 可以用 1-2 個佔位符,
//年(y)可以用 1-4 個佔位符,毫秒(s)只能用 1 個佔位符(是 1-3 位的數字)
//example: (new date()).format("yyyy-mm-dd hh:mm:ss.s") ==> 2006-07-02 08:09:04.423
date.prototype.format = function
(fmt) ;
if (/(y+)/.test(fmt))
fmt = fmt.replace(regexp.$1, (this.getfullyear() + "").substr(4 - regexp.$1.length));
for (var k in
o)
if (new regexp("(" + k + ")").test(fmt))
fmt = fmt.replace(regexp.$1, (regexp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" +o[k]).length)));
return
fmt;}/*
** 更改日期
* y年, m月, d日, h小時, n分鐘,s秒
* example: new date().add("d",-1)
*/date.prototype.add = function
(part, value)
switch
(part)
}
unity C 把指定時間轉化成時間戳
比如今天的晚上八點 datetime today newdatetime now.year,now.month,now.day,20,0,0 system.datetime starttime timezone.currenttimezone.tolocaltime new system.datet...
C 將秒數轉化成任意時間格式
將秒數轉化成任意時間格式,可以使用c 的乙個函式timespan,看示例 timespan ts new timespan 0,0,3661 richtextbox2.text ts.hours 小時 ts.minutes 分鐘 ts.seconds 秒 也可以使用傳統的方法,看示例 int tot...
JS將字串轉化成數字
轉換成數字 ecmascript提供了兩種把非數字的原始值轉換成數字的方法,即parseint 和parsefloat 正如你可能想到的,前者把值轉換成整數,後者把值轉換成浮點數。只有對string型別呼叫這些方法,它們才能正確執行 對其他型別返回的都是nan。在判斷字串是否是數字值前,parsei...