代码之家  ›  专栏  ›  技术社区  ›  Rue Vitale

利用时间操纵日期

  •  0
  • Rue Vitale  · 技术社区  · 3 年前

    我有下面的代码来检查时间段是否可用。基本上,用户A会告诉我们它们什么时候可用,我们会向用户B显示所有可用的30分钟时隙。我正试图让这段代码与当前时刻一起工作。但是它不能正常工作。所有的日期都以utc的形式存储在mysql数据库中,我使用的是nodejs和reactjs。发生的事情是,当从一个时区转换到另一个时区时,我无法转换。东部时区未转换为utc。

    convertTime12to24 (time12h) {
        const [time, modifier] = time12h.split(' ');
    
        let [hours, minutes] = time.split(':');
    
        if (hours === '12') {
            hours = '00';
        }
    
        if (modifier === 'PM') {
            hours = parseInt(hours, 10) + 12;
        }
    
        return `${hours}:${minutes}`;
    }
    
    convertToMins (timeString) {
        const a = timeString.split(":");
        return (+a[0]) * 60 + (+a[1]);
    }
    
    checkIfTimeSlotAvailable (value) {
        var day = this.state.dateObject.day();
        if (this.props.availableTimeslots && this.props.availableTimeslots[day]) {
            const timeParts = this.convertTime12to24(value);
            let dateObject = Object.assign({}, this.state.dateObject);
            dateObject = moment(dateObject).set("hour", timeParts[0]);
            dateObject = moment(dateObject).set("minute", timeParts[1]);
            if (value === "10:00 AM") {
                alert(dateObject);
            }
    
            const timeInTz = this.convertToMins(moment(dateObject).tz(this.props.timezone).utc().format('HH:mm'));
            const timeInTzIn30 = timeInTz + 30;
    
            var times = this.props.availableTimeslots[day];
            for (var i = 0; i < times.length; i += 1) {
                var startTime = this.convertToMins(times[i].startTime);
                var endTime = this.convertToMins(times[i].endTime);
    
                if (value === "10:00 AM") {
                    console.dir(timeParts + " " + moment(dateObject).tz(this.props.timezone).utc().format('HH:mm A') + " " + timeInTz + " " + startTime + " " + endTime);
                }
                if (startTime <= timeInTz && timeInTzIn30 <= endTime) {
                    console.dir(value + " " + startTime + " " + timeInTz + " " + endTime);
                    return true;
                }
            }
        }
    

    我做错了什么?

    0 回复  |  直到 3 年前