27

我有一个输出数据数组的 PHP 脚本。然后将其转换为JSON使用该json_encode()功能。

我的问题是我的数组中有一个日期,但它的 JavaScript 格式不正确。我怎样才能在 PHP 中转换它呢?

$newticket['ThreadID'] =  $addticket;
$newticket['Subject'] =  $subject;
//$newticket['DateCreated'] =  date('d-m-Y G:H');

而不是上面的日期,我需要等效的 JavaScript 函数

新日期()

当我输出上述内容时,我得到以下“Fri Jun 01 2012 11:08:48 GMT+0100 (GMT Daylight Time)” 但是,如果我将 PHP 日期格式化为相同,则 JavaScript 会拒绝它。使困惑...

任何人都可以帮忙吗?

4

8 回答 8

38

您可能应该只使用时间戳

$newticket['DateCreated'] = strtotime('now');

然后将其转换为 Javascript 日期

// make sure to convert from unix timestamp
var now = new Date(dateFromPHP * 1000);
于 2012-05-31T15:58:28.017 回答
15

Javascript Date 类支持 ISO 8601 日期格式,所以我建议:

<?php 
      date('c', $yourDateTime); 
      // or for objects
      $dateTimeObject->format('c');
?>

文档说:格式字符“c”是 ISO 8601 日期(在 PHP 5 中添加)
例如:2004-02-12T15:19:21+00:00

更多信息: http: //php.net/manual/en/function.date.php

于 2017-03-16T23:35:27.620 回答
8

这很简单。

PHP代码:

$formatted_date = $newticket['DateCreated'] =  date('Y/m/d H:i:s');

Javascript代码:

var javascript_date = new Date("<?php echo $formatted_date; ?>");
于 2014-07-08T06:38:51.737 回答
1

如果您想更精确地使用时间戳,您应该使用 microtime() 而不是 now()。

这给了你:

echo round(microtime(TRUE)*1000);

php 中的一毫秒,类似 javascript 的时间戳。

于 2013-12-01T22:57:37.530 回答
1

很简单,我用这个:

new Date("<?= date('Y/m/d H:i:s'); ?>");
于 2016-07-12T13:36:30.043 回答
1

@jeremyharris 答案的改进或简化将是这个:

PHP 中的 DateTime 对象具有getTimestamp()格式,使用它并将值乘以 1000:

<?php 
    $phpDateTimeStamp = new Date('Y/m/d H:i:s')->getTimestamp() * 1000; 
?>

// JavaScript
let startTime = new Date(phpDateTimeStamp);
于 2020-02-14T13:59:02.763 回答
0
$newticket['DateCreated'] = date('d-m-Y G:H', strtotime($phpDateVariable));
于 2012-05-31T15:53:42.747 回答
0

最可靠的方法是扩展您的日期对象以将字符串解析为您的应用程序可以使用的对象。解析 mysql 日期时间字符串的简单示例

DateFromString(str){
 let months = ["January", "Febuary", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
 let date = str.split(" ")[0];
 let time = str.split(" ")[1];

 let [Y, M, d] = [date.split("-")[0], date.split("-")[1], date.split("-")[2]];
 let [H, m, s] = [time.split(":")[0], time.split(":")[1], time.split(":")[2]];

 return {
  FullYear: Y,
  Month: M - 1,
  MonthString: months[M - 1],
  Date: d,
  Time: {Hour: H, Minute: m, Second: s},
 };
}

如果您愿意,您可以包含第二个参数,该参数描述了使用默认值传递的字符串类型,并进行字符串测试以确定它是 unix 时间戳还是 javascript 时间戳或字符串,然后使用返回的对象要解析您的日期和时间,这是一个更全面的解决方案,因为它允许您构建一个动态处理多个日期说明符的接口。

于 2020-10-15T17:15:56.930 回答