87 lines
2.8 KiB
Vue
87 lines
2.8 KiB
Vue
<script>
|
||
//////////////////////////////////////////
|
||
// GZTimePicker
|
||
// This component was created to wrap the
|
||
// vuetify time picker to allow using string date
|
||
// and time in iso format and not lose the date
|
||
// portion when picking a new time
|
||
//2019-02-12T10:12:39.594206
|
||
/* eslint-disable */
|
||
export default {
|
||
props: {
|
||
value: {
|
||
type: String,
|
||
default: ""
|
||
}
|
||
},
|
||
render() {
|
||
var that = this;
|
||
return this.$createElement("v-time-picker", {
|
||
props: {
|
||
...this.$attrs,
|
||
value: this.value ? this.value.substr(11, 8) : null
|
||
},
|
||
on: {
|
||
...this.$listeners,
|
||
input: function(time) {
|
||
// debugger;
|
||
//Put back the time portion from before
|
||
var combinedDateAndTimeAsString = that.value.substr(0, 11) + time;
|
||
|
||
var timestamp,
|
||
struct,
|
||
minutesOffset = 0,
|
||
numericKeys = [ 1, 4, 5, 6, 7, 10, 11 ];
|
||
|
||
// ES5 §15.9.4.2 states that the string should attempt to be parsed as a Date Time String Format string
|
||
// before falling back to any implementation-specific date parsing, so that’s what we do, even if native
|
||
// implementations could be faster
|
||
// 1 YYYY 2 MM 3 DD 4 HH 5 mm 6 ss 7 msec 8 Z 9 ± 10 tzHH 11 tzmm
|
||
if (
|
||
(struct = /^(\d{4}|[+\-]\d{6})(?:-(\d{2})(?:-(\d{2}))?)?(?:T(\d{2}):(\d{2})(?::(\d{2})(?:\.(\d{3}))?)?(?:(Z)|([+\-])(\d{2})(?::(\d{2}))?)?)?$/.exec(
|
||
combinedDateAndTimeAsString
|
||
))
|
||
) {
|
||
// avoid NaN timestamps caused by “undefined” values being passed to Date.UTC
|
||
for (var i = 0, k; (k = numericKeys[i]); ++i) {
|
||
struct[k] = +struct[k] || 0;
|
||
}
|
||
|
||
// allow undefined days and months
|
||
struct[2] = (+struct[2] || 1) - 1;
|
||
struct[3] = +struct[3] || 1;
|
||
|
||
if (struct[8] !== "Z" && struct[9] !== undefined) {
|
||
minutesOffset = struct[10] * 60 + struct[11];
|
||
|
||
if (struct[9] === "+") {
|
||
minutesOffset = 0 - minutesOffset;
|
||
}
|
||
}
|
||
|
||
timestamp = Date.UTC(
|
||
struct[1],
|
||
struct[2],
|
||
struct[3],
|
||
struct[4],
|
||
struct[5] + minutesOffset,
|
||
struct[6],
|
||
struct[7]
|
||
);
|
||
} else {
|
||
timestamp = Date.parse(combinedDateAndTimeAsString);
|
||
}
|
||
|
||
var newDateAsString = new Date(timestamp).toISOString();
|
||
|
||
// var dateObjectFromString = new Date(combinedDateAndTimeAsString);
|
||
// var newDateAsString = dateObjectFromString.toISOString();
|
||
|
||
that.$emit("input", newDateAsString);
|
||
}
|
||
}
|
||
});
|
||
}
|
||
};
|
||
</script>
|