Bojjaiah Ответов: 2

Вычислите время между начальной датой и конечной датой и автоматическое приращение, как таймер


Я пытаюсь показать время автоматического приращения между начальной датой и конечной датой. И он прекрасно работает только для одного и того же дня, когда начинается Дата-Время и заканчивается дата-время. Если начальная и конечная дата-время отличаются, то это работает неправильно. Для этого я попробовал ниже код.

Что я уже пробовал:

код JavaScript

<script type="text/javascript">
        function toSeconds(time_str) {
            var parts = time_str.split(':');
            return parts[0] * 3600 +
                parts[1] * 60 +
                +
                parts[2];
        }

        function StartTimer(startTimeP, endTimeP) {
            var difference = Math.abs(toSeconds(startTimeP) - toSeconds(endTimeP));
            //console.log(difference);
            var result = [
                Math.floor(difference / 3600),
                Math.floor((difference % 3600) / 60),
                difference % 60
            ];

            var x = setInterval(function () {
                result[2] = result[2] + 1;
                if (result[2] >= 60) {
                    result[2] = 0;
                    result[1] = result[1] + 1;
                }
                if (result[1] >= 60) {
                    result[1] = 0;
                    result[0] = result[0] + 1
                }

                result[0] = result[0] === 24 ? 0 : result[0]

                var temp = result.map(function (v) {
                    var tempResult = v < 10 ? '0' + v : v;
                    return tempResult;
                }).join(':');

                //console.log(temp);
                $(".worked_time").text(temp);
            }, 1000);
        }

        function Say() {
            //document.getElementById('AncClick').click();
            $("#AncClick").click();
        }
    </script>


И метка в файле Default.aspx

<asp:Label ID="lblTrackWorkedHours" runat="server" CssClass="worked_time" ToolTip="Worked Hours"></asp:Label>


Умолчанию.aspx-файл.в CS

ScriptManager.RegisterStartupScript(Page, GetType(), "myscript", "StartTimer('11:34:25 PM','15:55:38 PM');", true);


Здесь 11:34:25 вечера является 27-02-2019 11:34:25 вечера и 15:55:38 вечера является 28-02-2019 15:55:38 вечера Так что если я вычислю результат, то он должен быть 16 часов +- но это же видно 7-часовой- Это неверный расчет.

Поэтому предложите нам правильно отображать с инкрементом средства, после чего он должен быть инкрементным авто, как таймер.

2 Ответов

Рейтинг:
2

MadMyche

Лучший способ в любом языке работать с датами и временем-это работать с ними в соответствующем формате DateTime, а не разбирать их как строку.
Пока вы работаете с этим, фактические переменные будут просто числами, и с ними гораздо легче работать, так как это простое вычитание.

То, что я сделал, - это определил ваши переменные как даты, а затем вычитал. Поскольку это происходит в миллисекундах, я делю их на 1000, чтобы получить секунды. После того как вы истекли секунды вы можете легко конвертировать в минуты и часы

var date1 = new Date('2019-02-27T23:34:25');
var date2 = new Date('2019-02-28T15:55:38');
var ElapsedSeconds = (date2 - date1) / 1000;
// var ElapsedHours = ElapsedSeconds / 3600;


Рейтинг:
2

Bojjaiah

Наконец-то решил я сам, написав ниже код.

<script type="text/javascript"> 
        function StartTimer(startDateTimeP, endDateTimeP) {

            var date1 = new Date(startDateTimeP);
            var date2 = new Date(endDateTimeP);
            var oneDay = 24 * 60 * 60; // hours*minutes*seconds
            var oneHour = 60 * 60; // minutes*seconds
            var oneMinute = 60; // 60 seconds
            var firstDate = date1.getTime(); // convert to milliseconds
            var secondDate = date2.getTime(); // convert to milliseconds
            var seconds = Math.round(Math.abs(firstDate - secondDate) / 1000); //calculate the diffrence in seconds
            // the difference object
            var difference = {
                "days": 0,
                "hours": 0,
                "minutes": 0,
                "seconds": 0,
            }
            //calculate all the days and substract it from the total
            while (seconds >= oneDay) {
                difference.days++;
                seconds -= oneDay;
            }
            //calculate all the remaining hours then substract it from the total
            while (seconds >= oneHour) {
                difference.hours++;
                seconds -= oneHour;
            }
            //calculate all the remaining minutes then substract it from the total 
            while (seconds >= oneMinute) {
                difference.minutes++;
                seconds -= oneMinute;
            }
            //the remaining seconds :
            difference.seconds = seconds;
            //return the difference object
            //$('#countdown').text(difference.days + ' Days ' + difference.hours + ' Hours ' + difference.minutes + ' Minutes ' + difference.seconds + ' Seconds');
            //console.log(difference);
            return difference;
        }
        setInterval(function () {
            //'02/27/2019 11:34:25 PM'
            var result = StartTimer(new Date('02/27/2019 11:34:25 PM'), new Date());
            $('#countdown').text(result.days + ' Days ' + result.hours + ' Hours ' + result.minutes + ' Minutes ' + result.seconds + ' Seconds');
            //StartTimer();
        }, 1000);



    </script>


Вышеописанное решение работает так, как и ожидалось, но как вызвать эту функцию внутри c#.

Пожалуйста, предложите мне.