每个日期如下:
$product =\DB::table('order_details')
->where('order_id',$order_id)
->where('order_product_id',$product_id)
->first();
if(!$product) {
return response()->json(['status' => 0]);
}
return response()->json(['status' => $product]);
其中第一部分只是日期,第二部分是一天中的时间,这也可能等于以下任何一种:下午,中午,午夜。
我想将每个这样的日期转换为数字。
首先,我们会得到一个基准日期,例如
"dd/mm/yy Morning"
然后,对于每个日期,我想计算此日期和基准日期之间的天数。此外,如果我们的日期具有“晨”标签,那么我们只需将整数值存储为我们的数值。但是,如果日期具有“中午”标记,那么我们将数字加1/4。如果是下午,我们加2/4,如果是午夜,我们加3/4。
所以,例如,日期
"05/05/05 Morning".
应转换为1.75,
而
"06/05/05 Midnight",
应该只是10。
知道如何在R中执行此操作?
答案 0 :(得分:3)
使用stringr和lubridate包,此函数采用指定格式的字符串“dd / mm / yy TimeOfDay”并返回日期时间对象(其中Morning = 6am,Noon = 12pm,Afternoon = 6pm,Midnight =上午12点。
library(stringr)
library(lubridate)
unpack <- function(s, tod_levels = c("Morning", "Noon", "Afternoon", "Midnight")) {
s <- str_split(s, " ")[[1]]
s_hr <- as.integer(factor(s[2], levels = tod_levels)) * 6 * 60 * 60
as_datetime(dmy(s[1])) + s_hr
}
使用此方法准备基线并与新时间进行比较的示例:
baseline <- unpack("05/05/05 Morning")
unpack("06/05/05 Midnight") - baseline
#> Time difference of 1.75 days
as.numeric(unpack("06/05/05 Midnight") - baseline)
#> [1] 1.75
as.numeric(unpack("15/05/05 Morning") - baseline)
#> [1] 10