有没有办法将 hh:mm 的字符串转换为 Javascript 中的日期
Is there a way to cast a string of only hh:mm to Date in Javascript
我在 mongoose 模式中有一个表示日期的营业时间对象。我正在传递一个 json 对象并检索以将 Date 解析为字符串。我想知道您是否可以或者将其表示为另一种类型的对象是否会更好。像这样传递时我得到的错误是:验证失败:business.businessHours.monday.startTime:转换到日期失败,值“08:00”(类型字符串)
解决方法是设置器,它将添加当前日期以及小时和分钟:
date.setHours(08);
date.setMinutes(30);
我觉得有更好的方法。
有没有办法在 json 中传递日期对象?
我的json是:
{
...,
"businessHours":{
"monday": {
"startTime": "08:00",
"endTime": "18:30"
},
"tuesday": {
"startTime": "08:00",
"endTime": "18:30"
},
"wednesday": {
"startTime": "08:00",
"endTime": "18:30"
},
"thursday": {
"startTime": "08:00",
"endTime": "18:30"
},
"friday": {
"startTime": "08:00",
"endTime": "18:30"
},
"saturday": {
"startTime": null,
"endTime": null
},
"sunday": {
"startTime": null,
"endTime": null
}
}
}
架构如下所示:
const sellerSchema = new mongoose.Schema({
user: {
type: mongoose.Schema.Types.ObjectId,
ref: "User",
unique: true,
},
...,
business: {
businessHours: {
monday: {
startTime: {
type: Date,
},
endTime: {
type: Date,
},
},
tuesday: {
startTime: {
type: Date,
},
endTime: {
type: Date,
},
},
wednesday: {
startTime: {
type: Date,
},
endTime: {
type: Date,
},
},
thursday: {
startTime: {
type: Date,
},
endTime: {
type: Date,
},
},
friday: {
startTime: {
type: Date,
},
endTime: {
type: Date,
},
},
saturday: {
startTime: {
type: Date,
},
endTime: {
type: Date,
},
},
sunday: {
startTime: {
type: Date,
},
endTime: {
type: Date,
},
},
},
}
我知道我可以在保存之前转换它,但是有没有办法解析一个只有 hh:mm 的字符串呢?我似乎找不到办法,或者将它表示为不同的对象会更好,什么对象最适合这种情况。
或者我应该有这样的架构:
我需要小时和分钟用于未来的逻辑。
const sellerSchema = new mongoose.Schema({
...,
business: {
businessHours: {
monday: {
startTime: Number, //which will be represented as HHMM
endTime: Number, //which will be represented as HHMM
},
},
},
});
谢谢
使用 "18:30"
或 1830
这样的值并没有太大区别。一个和另一个一样坏。
像 "18:30"
这样的值是字符串,您不能将它们转换为 Date
。如果你喜欢这样做,那么你必须有一个完整的 date/time 字符串,例如“2022-05-06T18:30:00”。但是,您应该永远不要 将日期值存储为字符串,这是一个设计缺陷。始终存储正确的 Date
个对象!
使用工作日名称也是一个坏主意,MongoDB 本身不支持(本地化的)工作日名称。具有动态字段名称也是一个糟糕的设计。
我会推荐这个:
{
businessHours: [
{ dayOfWeek: 1, startHour: 8, startMinute: 0, endHour: 18, endMinute: 30 },
{ dayOfWeek: 2, startHour: 8, startMinute: 0, endHour: 18, endMinute: 30 },
...
{ dayOfWeek: 5, startHour: 8, startMinute: 0, endHour: 18, endMinute: 30 }
]
}
根据 ISO-8601,周从星期一开始,因此 dayOfWeek: 1
表示星期一。
然后您可以从中轻松创建 Date
值,例如:
{
$dateFromParts : {
'isoWeekYear': {$isoWeekYear: "$$NOW"},
'isoWeek': {$isoWeek: "$$NOW"},
'isoDayOfWeek': "$dayOfWeek",
'hour': "$startHour",
'minute': "$startMinute"
}
}
如果您使用工作日名称,那么您将不得不处理 $switch or you need a 3rd party library like moment.js, luxon or Day.js。
我在 mongoose 模式中有一个表示日期的营业时间对象。我正在传递一个 json 对象并检索以将 Date 解析为字符串。我想知道您是否可以或者将其表示为另一种类型的对象是否会更好。像这样传递时我得到的错误是:验证失败:business.businessHours.monday.startTime:转换到日期失败,值“08:00”(类型字符串)
解决方法是设置器,它将添加当前日期以及小时和分钟:
date.setHours(08);
date.setMinutes(30);
我觉得有更好的方法。 有没有办法在 json 中传递日期对象?
我的json是:
{
...,
"businessHours":{
"monday": {
"startTime": "08:00",
"endTime": "18:30"
},
"tuesday": {
"startTime": "08:00",
"endTime": "18:30"
},
"wednesday": {
"startTime": "08:00",
"endTime": "18:30"
},
"thursday": {
"startTime": "08:00",
"endTime": "18:30"
},
"friday": {
"startTime": "08:00",
"endTime": "18:30"
},
"saturday": {
"startTime": null,
"endTime": null
},
"sunday": {
"startTime": null,
"endTime": null
}
}
}
架构如下所示:
const sellerSchema = new mongoose.Schema({
user: {
type: mongoose.Schema.Types.ObjectId,
ref: "User",
unique: true,
},
...,
business: {
businessHours: {
monday: {
startTime: {
type: Date,
},
endTime: {
type: Date,
},
},
tuesday: {
startTime: {
type: Date,
},
endTime: {
type: Date,
},
},
wednesday: {
startTime: {
type: Date,
},
endTime: {
type: Date,
},
},
thursday: {
startTime: {
type: Date,
},
endTime: {
type: Date,
},
},
friday: {
startTime: {
type: Date,
},
endTime: {
type: Date,
},
},
saturday: {
startTime: {
type: Date,
},
endTime: {
type: Date,
},
},
sunday: {
startTime: {
type: Date,
},
endTime: {
type: Date,
},
},
},
}
我知道我可以在保存之前转换它,但是有没有办法解析一个只有 hh:mm 的字符串呢?我似乎找不到办法,或者将它表示为不同的对象会更好,什么对象最适合这种情况。
或者我应该有这样的架构:
我需要小时和分钟用于未来的逻辑。
const sellerSchema = new mongoose.Schema({
...,
business: {
businessHours: {
monday: {
startTime: Number, //which will be represented as HHMM
endTime: Number, //which will be represented as HHMM
},
},
},
});
谢谢
使用 "18:30"
或 1830
这样的值并没有太大区别。一个和另一个一样坏。
像 "18:30"
这样的值是字符串,您不能将它们转换为 Date
。如果你喜欢这样做,那么你必须有一个完整的 date/time 字符串,例如“2022-05-06T18:30:00”。但是,您应该永远不要 将日期值存储为字符串,这是一个设计缺陷。始终存储正确的 Date
个对象!
使用工作日名称也是一个坏主意,MongoDB 本身不支持(本地化的)工作日名称。具有动态字段名称也是一个糟糕的设计。
我会推荐这个:
{
businessHours: [
{ dayOfWeek: 1, startHour: 8, startMinute: 0, endHour: 18, endMinute: 30 },
{ dayOfWeek: 2, startHour: 8, startMinute: 0, endHour: 18, endMinute: 30 },
...
{ dayOfWeek: 5, startHour: 8, startMinute: 0, endHour: 18, endMinute: 30 }
]
}
根据 ISO-8601,周从星期一开始,因此 dayOfWeek: 1
表示星期一。
然后您可以从中轻松创建 Date
值,例如:
{
$dateFromParts : {
'isoWeekYear': {$isoWeekYear: "$$NOW"},
'isoWeek': {$isoWeek: "$$NOW"},
'isoDayOfWeek': "$dayOfWeek",
'hour': "$startHour",
'minute': "$startMinute"
}
}
如果您使用工作日名称,那么您将不得不处理 $switch or you need a 3rd party library like moment.js, luxon or Day.js。