【发布时间】:2019-05-12 18:00:36
【问题描述】:
我有一个应用程序,我在其中使用几个日期/时间操作函数来填充几个日历。基本上,用户从下拉列表中选择月份/年份(例如 2019 年 3 月),然后我用 03/01/2019 和 03/31/2019 填充日历。
我想做这个客户端,所以尝试将这些函数转换为 javascript,但我得到了奇怪的结果,看不出我做错了什么。
这是我定义和使用的原始 C# 函数:
public static DateTime FirstDayOfMonth(this DateTime dt)
{
return new DateTime(dt.Year, dt.Month, 1);
}
public static DateTime LastDayOfMonth(this DateTime dt)
{
DateTime dtFirstDayOfMonth = new DateTime(dt.Year, dt.Month, 1);
DateTime dtLastDayOfMonth = dtFirstDayOfMonth.AddMonths(1).AddDays(-1);
return dtLastDayOfMonth;
}
我这样称呼它们:
DateTime dtSelected = DateTime.Today.AddMonths(int.Parse(ddlMonth.SelectedValue)).AddYears(-1);
dtStartDate = Utils.FirstDayOfMonth(dtSelected);
dtEndDate = Utils.LastDayOfMonth(dtSelected);
下拉列表填充如下:
for (int i = 12; i >= 1; i--)
{
string s = DateTime.Now.AddYears(-1).AddMonths(i).ToString("Y");
ListItem li = new ListItem(s, i.ToString());
ddlMonth.Items.Add(li);
}
下拉条目如下所示:
May, 2019 -- value of 12
April, 2019 -- value of 11
....
July, 2018 -- value of 2
June, 2018 -- value of 1
这是我翻译成 javacript 的尝试:
function firstDayOfMonth(dt) {debugger
var year = dt.getFullYear();
var month = dt.getMonth();
var day = dt.getDate();
return new Date(year, month, 1);
}
function lastDayOfMonth(dt) {debugger
var year = dt.getFullYear();
var month = dt.getMonth();
var day = dt.getDate();
var firstDayOfMonth = new Date(year, month, 1);
var lastDayOfMonth = firstDayOfMonth.AddMonths(1).AddDays(-1); --> shows error when called; Object doesn't support property or method 'AddMonths'
return lastDayOfMonth;
}
$(document).on('change', '#ddlMonth', function () {debugger
var monthID = this.value;
var ddlMonth = $('#ddlMonth');
var today = new Date();
var startDate = new Date();
var endDate = new Date();
var dtSelected = new Date();
if (ddlMonth.val() == "")
{
....
}
else
{debugger
dtSelected.setMonth(dtSelected.getMonth() + ddlMonth.val() + 1); -- this becomes "Wed Oct 12, 2360" if I select "March, 2019" from dropdown!
dtSelected.setFullYear(dtSelected.getFullYear() - 1);
dtStartDate = firstDayOfMonth(dtSelected);
dtEndDate = lastDayOfMonth(dtSelected);
}
【问题讨论】:
-
你能显示奇怪的结果吗?共有三种不同类型的 DateTime 对象 1) 窗口从 1/1/1 开始 2) 窗口从 1/1/1900 开始 3) Unix 从 1970 年 1 月 1 日开始
-
当我选择值为 10 的“2019 年 3 月”时,在执行第一条语句(例如 .setMonth)后的“else”部分中,它显示 dtSelected 为“Wed Oct 12 2360 18:57 :37: (时间正确),下一条语句显示为“Mon Oct 01 2359”,下一条语句(例如 firstDayOfMonth())显示为 Thu Oct 01, 2359”,当它尝试执行 lastDayOfMonth 时,“var lastDayOfMonth = firstDayOfMonth.AddMonths...”显示“对象不支持属性或方法‘AddMonths’
-
新代码具有指令 new Date() 在 Java 中获取默认日期,而原始代码填充当前日期。看起来您现在有了一个可行的答案。
标签: javascript c# datetime