Moment.js在未来日期的情况下错误地转换日期

时间:2018-05-31 12:17:43

标签: javascript json momentjs

我正在使用moment.js比较我的javascript代码中的两个日期。 输入值从JSON字符串传递。

当我提供日期21/01/2050 00:00(MM / DD / YYYY HH:mm FORMAT)时,结果日期显示为21/1/1950 00:00。 我尝试使用以下选项:

  1. moment(item["End Date"]).utc().format()
  2. moment(item["Start Date"]).format('MM/DD/YYYY HH:mm')
  3. moment(new Date(item["Start Date"])).format('MM/DD/YYYY HH:mm')
  4. 但这些仍然是1950年而不是2050年。

    有没有办法正确格式化这个?

1 个答案:

答案 0 :(得分:2)

由于您的输入不是{8}标识的ISO 8601或RFC 2822格式

  

当从字符串创建片刻时,我们首先检查字符串是否与已知的moment(String)格式匹配,然后检查字符串是否与ISO 8601格式匹配,然后再降至{{1}的后退如果找不到已知格式。

     

警告:浏览器对解析字符串的支持不一致。因为没有关于应该支持哪种格式的规范,所以在某些浏览器中有效的功能在其他浏览器中不起作用。

     

要解析除ISO 8601字符串以外的任何内容的一致结果,您应该使用RFC 2822 Date time

所以你必须使用String + Format,将 public static void SaveCurrentPlaylistToSheet(YouTubeVideo[] CurrentPlaylist) { string currentTitle; using (connection = new OleDbConnection(ConnectionString)) { connection.Open(); command = new OleDbCommand(); command.Connection = connection; using (command = connection.CreateCommand()) { for (int i = 0; i < CurrentPlaylist.Length; i++) { currentTitle = Regex.Replace(CurrentPlaylist[i].title, " ", ""); if (NewPlaylist) { command.CommandText = string.Format("INSERT INTO [" + ActiveSheetTitle + "] (F1) values({0})", currentTitle); NewPlaylist = false; } else { command.CommandText = string.Format("INSERT INTO [" + ActiveSheetTitle + "$] (F1) values({0})", currentTitle); } command.ExecuteNonQuery(); // Execute insert query against excel file. } } 作为第二个参数传递。

这是一个实时样本:

&#13;
&#13;
new Date(string)
&#13;
'DD/MM/YYYY HH:mm'
&#13;
&#13;
&#13;