Unknwon лет назад: 8
Родитель
Сommit
f114f78743
3 измененных файлов с 24 добавлено и 6 удалено
  1. 1 2
      models/action.go
  2. 2 4
      models/issue.go
  3. 21 0
      models/models.go

+ 1 - 2
models/action.go

@@ -82,8 +82,7 @@ type Action struct {
 func (a *Action) AfterSet(colName string, _ xorm.Cell) {
 	switch colName {
 	case "created":
-		now := time.Now()
-		a.Created = a.Created.Add(now.Sub(now.UTC()))
+		a.Created = regulateTimeZone(a.Created)
 	}
 }
 

+ 2 - 4
models/issue.go

@@ -93,8 +93,7 @@ func (i *Issue) AfterSet(colName string, _ xorm.Cell) {
 			log.Error(3, "GetUserByID[%d]: %v", i.ID, err)
 		}
 	case "created":
-		now := time.Now()
-		i.Created = i.Created.Add(now.Sub(now.UTC()))
+		i.Created = regulateTimeZone(i.Created)
 	}
 }
 
@@ -1360,8 +1359,7 @@ func (c *Comment) AfterSet(colName string, _ xorm.Cell) {
 			}
 		}
 	case "created":
-		now := time.Now()
-		c.Created = c.Created.Add(now.Sub(now.UTC()))
+		c.Created = regulateTimeZone(c.Created)
 	}
 }
 

+ 21 - 0
models/models.go

@@ -10,7 +10,9 @@ import (
 	"os"
 	"path"
 	"strings"
+	"time"
 
+	"github.com/Unknwon/com"
 	_ "github.com/go-sql-driver/mysql"
 	"github.com/go-xorm/core"
 	"github.com/go-xorm/xorm"
@@ -40,6 +42,25 @@ func sessionRelease(sess *xorm.Session) {
 	sess.Close()
 }
 
+// Note: get back time.Time from database Go sees it at UTC where they are really Local.
+// 	So this function makes correct timezone offset.
+func regulateTimeZone(t time.Time) time.Time {
+	if setting.UseSQLite3 {
+		return t
+	}
+
+	zone := t.Local().Format("-0700")
+	if len(zone) != 5 {
+		return t
+	}
+	offset := com.StrTo(zone[2:3]).MustInt()
+
+	if zone[0] == '-' {
+		return t.Add(time.Duration(offset) * time.Hour)
+	}
+	return t.Add(-1 * time.Duration(offset) * time.Hour)
+}
+
 var (
 	x         *xorm.Engine
 	tables    []interface{}