【问题标题】:Problems with Datetime Periods In es-AR browseres-AR 浏览器中的日期时间段问题
【发布时间】:2019-12-08 23:13:35
【问题描述】:

我在 es-AR 浏览器中使用 javascript 的日期时间有问题。

这是一个每 15 天左右更改一次周期的选择。 问题是当我想在阿根廷西班牙语的浏览器中度过一个日期时,考虑到以下格式: M / d / yyyy 到 d / M / yyyy 然后它打破了我的约会。 我已经尝试过“If (es-AR)”,但这对我来说不是最好的解决方案。我想对一些可行的解决方案有一个很好的答案。 在这里留下代码非常感谢。

    function InitializeDropdownlistOfFirstOption(dropdownName, step) {
    $('#fromPeriodValidation').hide();
    $('#toPeriodValidation').hide();
    var dropdownList = $('#' + dropdownName);
    var timeperiod = dropdownList.val();
    var reg = new RegExp("\\.|-", "g");
    var userLang = navigator.language || navigator.userLanguage; 
    if (String(userLang) == 'es-AR') {
        alert(String(cultureInfo));
        var formattimeperiod = timeperiod.replace(reg, "/");
        if (formattimeperiod.split("/")[0] > 12) {
            var tempDay = formattimeperiod.split("/")[0];
            var tempMonth = formattimeperiod.split("/")[1];
            var tempYear = formattimeperiod.split("/")[2];
            formattimeperiod = tempMonth + "/" + tempDay + "/" + tempYear;
        }
        timeperiod = formattimeperiod;
    }

    var timeperioddate = new Date(timeperiod);
    
    var month = timeperioddate.getMonth();
    var day = timeperioddate.getDate();
    var year = timeperioddate.getFullYear();
    var option;
    dropdownList.get(0).remove(0);

    if (day <= 15) {
        switch (step) {
            case 1:
                day = new Date(new Date(year, (month + 1) % 12, 1).getTime() - 1000 * 60 * 60 * 24).getDate();
                option = new Date(year, month, day).format(pattern);
                dropdownList.prepend("<option value='" + option + "'>" + option + "</option>");     
                break;
            case -1:
                month--;
                if (month < 1) {
                    month += 12;
                    year--;
                }
                if (month == 12) {
                    day = 31;
                } else {
                    day = new Date(new Date(year, (month + 1) % 12, 1).getTime() - 1000 * 60 * 60 * 24).getDate();
                }
                option = new Date(year, month, day).format(pattern);
                dropdownList.prepend("<option value='" + option + "'>" + option + "</option>");
                break;
        }
    } else {
        switch (step) {
            case 1:
                month++;
                if (month > 12) {
                    month = 1;
                    year++;
                }
                if (month == 12) {
                    day = 31;
                } else {
                    day = new Date(new Date(year, (month) % 12, 1).getTime() - 1000 * 60 * 60 * 24).getDate();
                }
                option = new Date(year, month, 15).format(pattern);
                dropdownList.prepend("<option value='" + option + "'>" + option + "</option>");
                break;
            case -1:
                option = new Date(year, month, 15).format(pattern);
                dropdownList.prepend("<option value='" + option + "'>" + option + "</option>");
                break;
        }
    }
    dropdownList.get(0).selectedIndex = 0;
}
 <div class="timeperiod" id="timeperiod">
                <div style="width: 40%;float: left">
                    <label class="lblTime"><b>From Time Period</b></label>
                    <form class="form">
                        <button type="button" class="btn btn-primary button" onclick="InitializeDropdownlistOfFirstOption('drpfromdatePeriod', -1)">< </button>
                        <select name="drpfromdatePeriod" class="drpdateperiod" id="drpfromdatePeriod" onchange="SelectPeriod('drpfromdatePeriod')"></select>
                        <button type="button" class="btn btn-primary button" onclick="InitializeDropdownlistOfFirstOption('drpfromdatePeriod', 1)">> </button>
                        <img src="@Url.ImportContent("~/Content/images/time_period_calendar.png")" class="imgCalendar" id="imgFromdate" />
                    </form>
                    <label class="lblTime"><b>To Time Period</b></label>
                    <form class="form">
                        <button type="button" class="btn btn-primary button" onclick="InitializeDropdownlistOfFirstOption('drptodatePeriod', -1)">< </button>
                        <select name="drptodatePeriod" class="drpdateperiod" id="drptodatePeriod" onchange="SelectPeriod('drptodatePeriod')"></select>
                        <button type="button" class="btn btn-primary button" onclick="InitializeDropdownlistOfFirstOption('drptodatePeriod', 1)">> </button>
                        <img src="@Url.ImportContent("~/Content/images/time_period_calendar.png")" class="imgCalendar" id="imgTodate" />
                    </form>
                </div>
                
                <div>
                    <input type="checkbox" id="cbVat" value="Only return expense receipts with VAT" onclick="SelectVat(this.checked)"/>
                    <label class="lblTime" id="lbVatMessage"> <b>Only return expense receipts with VAT</b></label>
                    <img src="@Url.ImportContent("~/Content/images/info.gif")" class="imgInfo" title="If this checkbox is selected, the application will only return receipts for expenses with VAT." />
                </div>
                
            </div>

感谢任何帮助 :D enter image description hereenter image description here

【问题讨论】:

  • 您好,欢迎来到 SO! but it is not the best solution for me ...为什么?它不工作吗?弹出错误?不是一个干净的代码?我们如何改进您的代码?
  • 因为除了阿根廷西班牙语之外,还有很多国家的日期格式发生了变化。而且我不想为每个报告格式错误的国家/地区做一个 if。我想要更全球化的东西,适用于任何日期。
  • Jhonpol,你最好使用一些黑盒库。时间格式的问题太复杂了,几行代码就无法全局解决。
  • 我google了一下,找到了 momentjs 。不知道moment.parseZone() 是否适合您的需求,但请尝试一下。
  • @EricWu 我试试,非常感谢

标签: javascript asp.net datetime


【解决方案1】:

尝试自己全局解决时间格式问题并不是最好的方法。

MomentJs 等库实现了moment.parseZone() 等方法,似乎可以为您解决这些问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多