簡體   English   中英

使用JS和moment操作日期/時間

[英]Manipulating Date/time with JS and moment

我有2個日期,我需要使用這2個日期創建第3個日期。

if (document.getElementById("endDate"))
endDate = document.getElementById("endDate").value;

if (document.getElementById("presentDate"))
presentDate = document.getElementById("presentDate").value;

如果Present date = "12/5/2018"並且End date = "12/25/2018"那么我的New date = "12/26/2018";

由於JavaScript日期月份的范圍是0-11,而且日期有點亂,所以我沒有得到想要的結果。

我試過的

var presentDt = new Date(presentDate);
var endDt = new Date(endDate);

var newDay = endDt.getUTCDate()+1; 
var presentMonth = presentDt.getUTCMonth();
var presentYear = presentDt.getUTCFullYear();
var nextDate= presentMonth + '/' + endDay + '/' + presentYear;
  • 問題1:上面的代碼有效,但是如果endDate在31號,則添加UTCDate+1使其UTCDate+1 32,這將返回無效日期。

  • 問題2:如果我執行UTCMonth() ,則返回11,但是如果我要添加2個月,則返回13,這也是無效的。 問題基本上是我無法根據需要操縱日期。

我也試過了片刻,但是我遇到了類似的問題,而且我無法輕松地按他們希望的方式操作日期。

還嘗試了getDategetMonth但是它做同樣的事情。

有沒有更好的方法來使用JavaScript處理整個日期/時間?

1:添加/減去天數:新日期(新日期().setDate(新日期().getDay()+ 3))

2:添加/減去月份: new Date(new Date()。setMonth(new Date()。getMonth()+ 3))

//your code
var presentDt = new Date(presentDate);
var endDt = new Date(endDate);

var newDay = new Date(new Date().setDate(endDt.getDay() + 2)); 
var presentMonth = presentDt.getUTCMonth();
var presentYear = presentDt.getUTCFullYear();

由於您的輸入字符串在整個環境中都不是new Date()識別的格式,因此我建議使用moment(String, String)進行解析。

然后,您可以使用moment(Object) ,矩的設置方法(例如year()month()date() )和format()來獲取所需的輸出。

這是一個現場樣本:

 var presentDt = "12/5/2018"; var endDt = "12/25/2018"; // Parse your input with momentjs var mPresent = moment(presentDt, "MM/DD/YYYY"); var mEnd = moment(endDt, "MM/DD/YYYY"); // Create a new momnt object compliant with your needs var nextDate = moment({ year: mPresent.year(), // get presentDt's year month: mPresent.month(), // get presentDt's month date: mEnd.add(1, 'day').date() // get endDt day of the month and add 1 day to it }); // Display the result in the format you need console.log(nextDate.format("MM/DD/YYYY")); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script> 

請注意,當endDt代表月份的最后一天時,您將獲得01作為日結果。

這就是我所做的:

首先,我創建了以下函數來查看天數和月數。

 function formattedDate(date) {
        var day = date.getDate();
        var monthIndex = date.getMonth();
        var year = date.getFullYear();

        return (monthIndex + 1) + '/' + day + '/' + year;
    }
    function myNewDate(datestring) {
        var dates = datestring.split("/");
        var year, month, day;
        if (dates.length < 3) {
            dates = datestring.split("-");
            year = dates[0];
            month = dates[1] - 1;
            day = dates[2];
        } else  {
            year = dates[2];
            month = dates[0] - 1;
            day = dates[1];
        }


        var days = [31, 28, 31, 30, 31, 30 ,31, 31, 30, 31, 30, 31];
        // Overflow day
        if (day > days[month])
            day = days[month];

        return new Date(year, month, day);
    }
    function newDate(date1, date2) {
        var days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
        var year = date1.getFullYear();
        var month = date1.getMonth() + 1;
        var day = date2.getDate() + 1;


        // Check leap year
        if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
            days[1] = 29;

        // Overflow day
        if (day > days[month])
            day = days[month];

        var newdate = new Date(year, month, day);

        return newdate;
    }

在這里,我使用上述功能創建了新日期。 您還可以根據需要通過更新上述內容來添加/減去天/月。

        var mpresent = myNewDate(presentDate);
        var mstart = myNewDate(startDate);
        var myDate =  (formattedDate(newDate(mpresent, mstart)));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM