带有Timezone的MySQL WeekOfYear()?

时间:2017-05-09 22:42:34

标签: php mysql

我的网络服务器位于法国&我的数据库有欧洲巴黎时区集...... 我的网站实际上是供居住在葡萄牙的人使用,他们比法国人少了-1H ......

我正在使用此查询来得到喜欢的一周。问题是当法国的新一周在00:30周一假设时,它应该仍然给我上周葡萄牙的结果,因为它仍然是周日23点30分....

df <- read.table(text=
"12/17/2012
1945
1950
2032
2/24/2012
2206
2209
2211
", stringsAsFactors = FALSE)
names(df) <- "original_time"

library(dplyr)
library(stringr)
library(zoo)

df %>% 
  mutate(event_date = if_else(str_detect(original_time, "/"), original_time, as.character(NA)),
         event_time = if_else(str_detect(original_time, "/"), as.character(NA), original_time),
         event_date = na.locf(event_date)) %>%
  filter(!is.na(event_time)) %>%
  mutate(event_date_time = paste(event_date, event_time),
         event_date_time = as.POSIXct(event_date_time, format="%m/%d/%Y %H%M")) %>%
  select(event_date_time)

# event_date_time
# 1 2012-12-17 19:45:00
# 2 2012-12-17 19:50:00
# 3 2012-12-17 20:32:00
# 4 2012-02-24 22:06:00
# 5 2012-02-24 22:09:00
# 6 2012-02-24 22:11:00

所以我的问题是,有没有办法用SQL查询做我想要的,或者我只能在php中做到这一点?

2 个答案:

答案 0 :(得分:1)

我认为你可以做这样的事情

"SELECT COUNT(*) as likes, user 
 FROM likes_week WHERE date_column 
 BETWEEN DATEADD(hh, -1, GETDATE()) 
 AND DATEADD(week,-1,GETDATE()) 
 GROUP BY user ORDER BY likes"

请记住,我假设您的日期列的名称是'date_column' 我在1小时前和1周前约会。

希望这有帮助!

答案 1 :(得分:0)

这取决于您如何存储日期和时间。次。

如果那是TIMESTAMP - 它只是Unix时间形式的简单UTC。它会自动转换为服务器的时区,指定或默认。

如果是DATETIME - 时区应该在。

那么这取决于你如何将它写入数据库。如果服务器在法国,并且时区设置正确,并且MySQL正在使用默认设置 - 所有DATETIME值都应该在法国时区。