【问题标题】:Time not getting converted to local time properly via moment.js时间没有通过 moment.js 正确转换为本地时间
【发布时间】:2015-08-27 04:59:58
【问题描述】:
11-06-2015 12:44:30 

我的日期时间具有上述格式,但它没有转换为本地时间,而是将月份改为 11 月。

var check = moment('@Model.Invoice.InvoiceDate').format('YYYY-MM-DD HH:mm:ss');

                    var localTime = moment.utc(check).toDate();
                    localTime = moment(localTime).format('YYYY-MM-DD HH:mm:ss');

                    console.log(localTime);

我正在使用 C# 的 DateTime.UTCNow 函数并在获取数据时使用以下代码。

代码:

 var formatDate = new Date('@Model.Invoice.InvoiceDate.ToLocalTime()');
                    console.log(formatDate);
                    formatDate = moment.utc(formatDate).toDate();
                    console.log(formatDate);
                    var dateTime = moment(formatDate).format('lll');
                    console.log(dateTime);

正在发生的事情的示例:

  var formatDate = new Date('Sat Jun 13 2015 13:00:11 GMT+0530 (India Standard Time)');
                            console.log(formatDate);
                            formatDate = moment.utc(formatDate).toDate();
                            console.log(formatDate);
                            var dateTime = moment(formatDate).format('lll');
                            console.log(dateTime);

【问题讨论】:

  • 你也可以在没有moment.js的情况下解决这个问题,使用javascript Date对象的本机方法。查看此链接 --- praveenlobo.com/techblog/…

标签: javascript c# momentjs utc


【解决方案1】:

您可以使用 ToString("s") 暂时打印一个 UTC ISO 8601 日期,但它会缺少 Z,因此您需要自己添加它。

var localTime = moment('@String.concat(Model.Invoice.InvoiceDate.ToString("s"), "Z")').format('lll');

或者通过在客户端添加 Z :

var localTime = moment('@Model.Invoice.InvoiceDate.ToString("s")' + 'Z').format('lll');

【讨论】:

  • 我的对象是一个日期时间字段而不是字符串
  • 这就是为什么有一个 ToString("s"),它将您的 DateTime 转换为 ISO8601 日期字符串,而 .net 实现缺少“Z”,所以 concat 添加它。
  • 我可以这样做:Convert.ToDateTime(string.Concat(DateTime.UtcNow.ToString("s"), "Z"))
  • 只需将我的 DateTime 替换为您的 DateTime 对象,然后将结果放入您的模板中。
  • 类似这样的东西:string.Concat(Model.Invoice.InvoiceDate.UtcNow.ToString("s"), "Z")
【解决方案2】:

试试这个

var check = moment('11-06-2015 12:44:30', 'DD-MM-YYYY HH:mm:ss')
                    .format('YYYY-MM-DD HH:mm:ss');

或者在你的情况下这个

var check = moment('@Model.Invoice.InvoiceDate', 'DD-MM-YYYY HH:mm:ss')
                    .format('YYYY-MM-DD HH:mm:ss');

而不是

var check = moment('@Model.Invoice.InvoiceDate')
                   .format('YYYY-MM-DD HH:mm:ss');

在给时刻一个日期字符串时,您需要指定哪个部分是什么。

【讨论】:

  • 如果时间格式改变了怎么办?现在我的服务器日期时间如下所示:6/12/2015
  • 在保存时我使用 c# 所以我在做 DateTime.UTCNow
猜你喜欢
  • 2015-05-20
  • 1970-01-01
  • 2017-08-24
  • 1970-01-01
  • 2019-09-07
  • 2017-12-09
  • 2021-01-07
  • 1970-01-01
相关资源
最近更新 更多