微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

问题解析日期显示不正确的日期

如何解决问题解析日期显示不正确的日期

我有一个生成今天日期的 JS 函数

function GetDate(date) {
    var today = new Date();
    var dd = String(today.getDate()).padStart(2,'0');
    var mm = String(today.getMonth() + 1).padStart(2,'0'); 
    var yyyy = today.getFullYear();

    today = dd + '/' + mm + '/' + yyyy;

    alert(today);

    return today;  // 13/03/2021
}

函数返回 13/03/2021

我将它传递给服务器端代码并​​执行此操作:

DateTime datetoday = DateTime.ParseExact(cdate,"dd/MM/yyyy",CultureInfo.GetCultureInfo("en-AU"));
emailcopy = emailcopy.Replace("{date}",datetoday.ToString("dd MMMM yyyy"));

但是这里将日期设为 12 march 2021

为什么要这样做?进入的日期显然是 13/03/2021。同样在下一行,我将这个日期添加sql Server 表中:

datetoday.ToString("yyyy-MM-dd")

而且添加数据库的日期也是正确的:2021-03-13.

解决方法

当您创建一个新的 DateTime 对象,但只设置它的日期部分时,这会将时间设置为 00:00:00(午夜)。这是格林威治标准时间。因此,当您格式化日期时,它会采用您在午夜设置的日期,并将其转换为您的时区,实际上是前一天。

你可以通过做这个“kludge”来解决这个问题:

var now = DateTime.Now;
var adjusted = new DateTime(
    dateToday.Year,dateToday.Month,dateToday.Day,now.Hour,now.Minute,now.Second);
var final = adjusted.ToString("dd MMMM yyyy");

不过,可能有更好的方法来做到这一点。

预计到达时间

您应该考虑使用 JavaScript 的 Date.toISOString() 而不是仅仅发送日期。然后在 C# 中,使用 Convert.ToDateTime() 来解析它。使用 UTC,您可以保证获得客户端计算机生成日期的确切时间。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。