Jquery / Javascript - 给日期变量加年份

16

我遇到了一个小问题,希望能得到一些帮助。我正在创建一个小表单,想要获取当前日期格式为'dd/mm/yyyy',并从下拉框中添加一个年份变量以创建最终的到期日期。唯一的问题是我不知道如何将开始日期解析为日期变量以完成计算。任何想法或帮助将不胜感激。保罗。

<script>
    $(document).ready(function () {
        $("#registerfor, #startdate, ").change(function () {
            // Get Variables
            var startdate = $("#startdate").val();
            var registerfor = $("#registerfor").val();
            // Add Years to Date
            var expirydate = startdate + registerfor;
            // Send Result on
            $("#expires").val(expirydate);
        });
    });
</script>
<input name="startdate" id="startdate" value="dd/mm/yyyy" />
<select id="registerfor" name="registerfor">
    <option value="1">1 Year</option>
    <option value="2">2 Years</option>
    <option value="3">3 Years</option>
</select>

你在使用任何jQuery吗? - KAsh
嗨@kash,是的,我希望使用Jquery。 - Brandrally
6个回答

36

一个快速而简单的解决方案:

var myDate = new Date();
myDate.setFullYear(myDate.getFullYear() + nbYearsToAdd);

"nbYearsToAdd" 可以为负数。


4
дЅїз”Ё setFullYear ж›їд»Ј setYearпјЊе› дёє setYear е·Із»Џиў«еєџејѓпјљhttps://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/Date/setYear - dieter

8
有时候看起来十分简单的任务实际上却非常复杂。
 $(document).ready( function () {

    $("#registerfor, #startdate").change( function () {

        var str = $("#startdate").val();

        if( /^\d{2}\/\d{2}\/\d{4}$/i.test( str ) ) {

            var parts = str.split("/");

            var day = parts[0] && parseInt( parts[0], 10 );
            var month = parts[1] && parseInt( parts[1], 10 );
            var year = parts[2] && parseInt( parts[2], 10 );
            var duration = parseInt( $("#registerfor").val(), 10);

            if( day <= 31 && day >= 1 && month <= 12 && month >= 1 ) {

                var expiryDate = new Date( year, month - 1, day );
                expiryDate.setFullYear( expiryDate.getFullYear() + duration );

                var day = ( '0' + expiryDate.getDate() ).slice( -2 );
                var month = ( '0' + ( expiryDate.getMonth() + 1 ) ).slice( -2 );
                var year = expiryDate.getFullYear();

                $("#expires").val( day + "/" + month + "/" + year );

            } else {
                // display error message
            }
        }
    });
});

Here is a fiddle so you can see it in action.


非常感谢你,布鲁诺。真的非常感激! - Brandrally
似乎太复杂了,下面的回答听起来更好。 - Julio Popócatl

1
var dt = new Date($("#startdate").val());

var updateDate = dt.setDate(dt.getFullYear() + $("#registerfor").val());

var dd = updateDate.getDate();
var mm = updateDate.getMonth();
var y = updateDate.getFullYear();

var someFormattedDate = dd + '/'+ mm + '/'+ y;
console.log(someFormattedDate);

嗨@don,感谢您的想法,但我真的很难让您的解决方案起作用。我确实看到了逻辑,但它不会实现以适应解决方案。如果我想在02/10/2012基础上添加2年,从而使到期字段显示02/10/2014,上述解决方案无法正常工作。尽管如此,我非常感谢您的想法和参与。 - Brandrally
抱歉,伙计。这段代码让我束手无策。它无法转换为日期。我进行了警报检查,变量updateDate返回一个类似于3074335200000的字符串,所以从中获取月份/日期/年份是出现问题的地方。 - Brandrally
@DOM,您的意思是使用setFullYear而不是setDate,对吗? - Kek

0
兄弟,它已经在运行了。如果你仍然想要转换成日期,那么请这样做:
var dat=Date.parse(startdate );

嗨,伊万,希望它能正常工作。上面的代码产生的结果类似于05/10/20122,通过解析日期,我得到的只是一个看起来类似于13365720000002的数字。 - Brandrally

0

我会:

  • 将日期格式化为 Date.parse 可以很好处理的格式 (mm/dd/yyyy)
  • 添加一年毫秒数乘以所选选项的数量
  • 重新格式化新值为人类可读格式并填充 #expires

    var dateArr = $("#startdate").val().split();
    var niceDate = Number(dateArr[1]) + "/" + Number(dateArr[0]) + "/" + Number(dateArr[2]);

    var expDate = Date.parse(niceDate) + 365*24*60*60*1000*Number($("#registerfor").val());

    $("#expires").val(expDate.getMonth()+1 + "/" + expDate.getDate() + "/" + expDate.getFullYear());

如果您需要二位数的日期和月份来表示到期日期,您可以有额外的变量来保存它们的字符串版本,并检查类似以下代码:
var padMonth = expDate.getMonth()+1;
if(expDate.getMonth()+1 < 10) padMonth = "0" + Number(expDate.getMonth()+1);

然后,您可以在$("#expires").val(...)中使用padMonth。

-1

网络上有很多日期选择器jQuery可供使用。

这个

其中一个是我最喜欢的,易于实现和根据我们的需求进行编辑。

如果您想从您的代码中使用脚本,您可以直接将日期值传递给var startdate,如下:

var startdate=<?php echo date("Y-m-d")?>

试试这个...可能有帮助。


1
嗨 Kash,谢谢您的回复,但不幸的是,我需要从已经建立的字段发送变量,因此我无法利用您的建议。不过感谢您的想法。 - Brandrally

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接