Javascript 如何使用moment制作此特定格式
我需要这样的输出:Javascript 如何使用moment制作此特定格式,javascript,vue.js,vuejs2,momentjs,Javascript,Vue.js,Vuejs2,Momentjs,我需要这样的输出: <el-date-picker v-model="dateTimePicker" format="yyyy-MM-dd HH:mm" type="datetime" size='small' placeholder="Pick a date"> </el-date-picker> 2017-08-11T16:11:00.000Z 我不知道这种格式叫什么。这种格式似乎至少有两种变体,上面的一种和下面的一种: 20
<el-date-picker
v-model="dateTimePicker"
format="yyyy-MM-dd HH:mm"
type="datetime"
size='small'
placeholder="Pick a date">
</el-date-picker>
2017-08-11T16:11:00.000Z
我不知道这种格式叫什么。这种格式似乎至少有两种变体,上面的一种和下面的一种:
2017-08-11 16:11:00+00:00
是同一件事吗?为什么有两种变体
现在我的问题是,我正在使用Vue2,具体来说,我正在使用以下组件:
将日期呈现给用户时,此组件将以以下格式显示:
2017-08-11 18:11:00
幕后如果我使用Vue调试器检查组件值,它会像2017-08-11T16:11:00.000Z一样存储
如果您注意到该值实际上是2小时偏移量,我猜这个vue组件会根据用户选择的时间和用户时区在内部存储UTC时间的值
当我问这个组件的创建者组件中存储了什么格式值时,我得到了他的回答:
DateTimePicker的值是一个日期对象。在将其发送到服务器之前,您可以将其格式化为您喜欢的任何形式
当我初始化这个组件时,我是这样做的:
<el-date-picker
v-model="dateTimePicker"
format="yyyy-MM-dd HH:mm"
type="datetime"
size='small'
placeholder="Pick a date">
</el-date-picker>
dateTimePicker从服务器获取分配的日期,该日期从服务器上存储的UTC时间转换为正确的本地时间
现在一切都好了,用户在加载之前创建的东西时看到了正确的时间,但现在如果用户尝试保存他正在处理的东西,客户端将发送dateTimePicker中的任何东西,当前在新页面上的dateTimePicker将采用yyyy MM dd HH:MM格式
这当然是因为用户并没有使用拾取的任何新时间,并且datepicker组件并没有使用我的服务器所期望的新的格式正确的值更新dateTimePicker变量
现在服务器将收到错误的时间,即X小时偏移量,并将错误的时间保存到数据库。现在,如果用户刷新页面,时间将是错误的。每次用户保存到服务器而不接触datepicker组件时,日期每次都会得到偏移量,以此类推
备选案文1:
若用户并没有弄乱datepicker组件,并且datepicker并没有插入正确格式化的时间,那个么如何向服务器发送正确的时间
备选案文2:
我是否可以用以下格式初始化datepicker组件:2017-08-11T16:11:00.000Z,这样即使用户对其不做任何操作,并且数据在保存时发送到服务器,服务器也会收到正确的时间
若我想使用第二个选项,那个么当我使用来自服务器的日期初始化dateTimePicker变量时,如何生成该格式
感谢您的建议。此功能:
dateTimePicker: moment.utc(this.initPublishedAtDate, 'YYYY-MM-DD HH:mm').format('YYYY-MM-DDTHH:mm:ssZ')
基本上,您要做的是允许用户以熟悉的格式输入和查看日期,但将日期以ISO 8601格式存储在数据库中 您可以通过以下两种方式实现这一点:
moment(date).format('YYYY-MM-DD HH:mm');
编辑:日期时间选择器将自动将时刻
实例转换为日期
实例,因此您可以避免格式
步骤,只需执行以下操作:
moment(date);
要将其转换回ISO,需要指定当前格式:
moment(date, 'YYYY-MM-DD HH:mm').toISOString();
一个示例实现:- 中间件 在发送响应和处理请求之前,请相应地格式化日期
- ORM突变子 从数据库中获取日期后,在将其持久化到数据库中之前,使用访问器和变异器(本质上分别是美化的getter和setter)对其进行格式化。流行的ORM实现喜欢并支持这一点
this.initPublishDatDate是什么类型的对象?字符串?关于Z格式,它是ISO格式:
2017-08-11T16:11:00.000Z
is。第二种格式(没有T
)不符合ISO标准。但是+00:00
和Z
的意思是相同的(“零偏移量”)RoyJ,它是一个格式为yyyy-mm-dd HH:mm:ss的字符串。雨果感谢你的澄清。我如何从yyyy-mm-dd HH:mm:sswith-矩js生成此ISO 8601格式,可能吗?我注意到您的小提琴最初使用字符串填充date
,但datepicker将其更改为日期对象。如果将其保留为日期,则会简化一些事情(通过时间的次数更少):