【问题标题】:Javascript Date to C# Sortable ("s") FormatJavascript 日期到 C# 可排序(“s”)格式
【发布时间】:2015-06-10 01:54:42
【问题描述】:

我正在尝试将 DateTime 作为字符串传递给我的 Web API 服务,并将其解析为 c# 中的可排序日期时间。请在下面找到代码:

public static DateTime? ToDateTime(this string dateTime)
    {
        if (string.IsNullOrEmpty(dateTime))
        {
            return null;
        }
        return DateTime.ParseExact(dateTime, Constant.DateFormat, CultureInfo.InvariantCulture);
    }

客户端代码:

var d = new Date();
var dateTime = JSON.stringify(d); // e.x: "2014-01-01T23:28:56.782Z"

我也尝试了以下选项:

d.toLocaleDateString()); 
d.toLocaleString();
d.toDateString();

非常感谢任何帮助。

【问题讨论】:

  • 出于好奇,如果您只是想将它从 JavaScript Date 对象转换为 C# DateTime?对象,为什么你需要它在中间的可排序字符串格式?
  • 请记住,您还需要考虑本地客户端的 GMT 偏移量。
  • @Tim 因为这是代码中现有的支持格式,我现在不能更改它,并处理连锁反应。

标签: javascript c# jquery asp.net-web-api


【解决方案1】:

如果你坚持将它作为字符串传递,那么你可以使用 momentjs

moment().format('MMMM Do YYYY, h:mm:ss a');

而且你可以在服务器端用格式解析它

您没有提供网络 API 代码 但另一种方法是在服务器端更改 Datetime 的序列化程序

// class to be serialized
public class MyClass
{
    [JsonProperty(ItemConverterType = typeof(JavaScriptDateTimeConverter))]
    public DateTime? DateTime1;
    public DateTime? DateTime2;
}

【讨论】:

  • 不幸的是我不能在这种情况下使用momentjs。有没有办法使用纯 JavaScript 来做到这一点?
  • 当然是 d.getFullYear()+" "+d.getMonth()+" "+d.getDate(),但我认为在这种情况下,服务器端更改序列化程序会更好,特别是如果案件在不同的地方
  • 在这种情况下,最好的解决方案是使用子类从整个对象继承,并为它编写一个 JsonCreationConverter 我猜。在那里,您可以将条件设​​置为在它为空的情况下如何解析它。或者您可以在客户端测试它是否为空,而不仅仅是从对象中删除属性 - 当我无法控制服务器端时,我会这样做
猜你喜欢
  • 2023-03-13
  • 2011-03-29
  • 2020-05-12
  • 2010-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-03
  • 2011-09-22
相关资源
最近更新 更多